SQL en bloc DestinationTableName

c# database sqlbulkcopy sql-server

Question

J'utilise un fichier .csv pour une insertion en masse dans ma base de données SQL Server. Le problème est DestinationTableName car lorsque j'utilise une chaîne pour DestinationTableName , j'obtiens une exception d'erreur.

System.InvalidOperationException: Impossible d'accéder à la table de destination

comme vous pouvez le voir sur la capture d'écran.

Si une utilisation "test" comme copy.DestinationTableName = "test"; ça fonctionne bien

entrez la description de l'image ici

string symbolName = dt.Rows[1][0].ToString();

string strConnection = @"Data Source =.\SQLEXPRESS; AttachDbFilename = C:\USERS\JEF\DOCUMENTS\DATABASE1.MDF; Integrated Security = True; Connect Timeout = 30; User Instance = True";
SqlConnection condb2 = new SqlConnection(strConnection);

string createTablerow ="create table ['"+symbolName+"'] (code1 VARCHAR(100) COLLATE Arabic_CI_AI_KS_WS,date1 varchar(50),open1 varchar(50),high1 varchar(50),low1 varchar(50),close1 varchar(50),vol1 varchar(50))";

using (SqlConnection connection = new SqlConnection(strConnection))
{
    SqlCommand command1 = new SqlCommand(createTablerow, connection);
    connection.Open();
    command1.ExecuteNonQuery();
}

using (SqlConnection cn = new SqlConnection(strConnection))
{
    cn.Open();

    using (SqlBulkCopy copy = new SqlBulkCopy(cn))
    {
        copy.ColumnMappings.Add(0, "code1");
        copy.ColumnMappings.Add(1, "date1");
        copy.ColumnMappings.Add(2, "open1");
        copy.ColumnMappings.Add(3, "high1");
        copy.ColumnMappings.Add(4, "low1");
        copy.ColumnMappings.Add(5, "close1");
        copy.ColumnMappings.Add(6, "vol1");

        copy.DestinationTableName = symbolName;

        copy.WriteToServer(dt);
    }
}

Réponse acceptée

Comme vous l'avez fait quand vous avez créé la table:

"create table ['"+symbolName+"']

l'astuce ici est probablement d'échapper au nom de la table pour compenser le trait d'union,

copy.DestinationTableName = "[" + symbolName + "]";

Remarque: si possible, il est généralement préférable de s'en tenir aux noms qui ne nécessitent pas d'échappatoire Mais ... si ça marche.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi