我知道我需要用方括号中的空格将任何列名括起来[]
。当我建立我的DataTable
专栏时,我会这样做。
for (int i = 0; i < columns.Count; i++)
{
string colname = columns[i].ToString();
if (colname.Contains(" "))
{
colname = "[" + colname + "]";
}
dt.Columns.Add(colname);
}
然后,一旦我将所有数据作为行添加到 my 中DataTable
,我就会调用一个插入函数,该函数使用下面的代码来映射列。DataTable
和数据库表中的列名相同。
using (var connection = new SqlConnection(ConnectionString))
{
SqlTransaction transaction = null;
connection.Open();
try
{
transaction = connection.BeginTransaction();
using (var sqlBulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, transaction))
{
sqlBulkCopy.DestinationTableName = "DBTableName";
foreach (DataColumn col in dataTable.Columns)
{
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
sqlBulkCopy.WriteToServer(dataTable);
}
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
}
如果我在执行时设置断点ColumnMapping
,则col.ColumName
正确包含名称周围的方括号,其中包含空格。
但是,当它尝试调用该WriteToServer
方法时,它会失败并且异常说
给定的 ColumnName 'Name With Space' 与数据源中的任何列都不匹配。
为什么/在哪里去掉方括号,我该如何解决这个问题?