SqlBulkCopy 在其中包含空格的列上失败
SqlBulkCopy fails on columns with spaces in them
我知道我需要用方括号 []
中包含空格的所有列名称。我在构建 DataTable
专栏时这样做。
for (int i = 0; i < columns.Count; i++)
{
string colname = columns[i].ToString();
if (colname.Contains(" "))
{
colname = "[" + colname + "]";
}
dt.Columns.Add(colname);
}
然后,一旦我将所有数据作为行添加到我的 DataTable
中,我调用一个插入函数,它使用下面的代码来映射列。 DataTable
和数据库 table.
中的列名相同
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
方法时,它失败了,异常显示
The given ColumnName 'Name With Space' does not match up with any column in data source.
Why/where 是否去掉了方括号,我该如何解决这个问题?
如果您想插入所有列,则不需要映射。你可以删除这个:
foreach (DataColumn col in dataTable.Columns)
{
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
不确定这是否与我访问的 .net 或 sql 服务器的版本有关,但我错了,不需要在我的列名称周围添加方括号。它无论如何都能正确处理其中的空格。
我知道我需要用方括号 []
中包含空格的所有列名称。我在构建 DataTable
专栏时这样做。
for (int i = 0; i < columns.Count; i++)
{
string colname = columns[i].ToString();
if (colname.Contains(" "))
{
colname = "[" + colname + "]";
}
dt.Columns.Add(colname);
}
然后,一旦我将所有数据作为行添加到我的 DataTable
中,我调用一个插入函数,它使用下面的代码来映射列。 DataTable
和数据库 table.
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
方法时,它失败了,异常显示
The given ColumnName 'Name With Space' does not match up with any column in data source.
Why/where 是否去掉了方括号,我该如何解决这个问题?
如果您想插入所有列,则不需要映射。你可以删除这个:
foreach (DataColumn col in dataTable.Columns)
{
sqlBulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
不确定这是否与我访问的 .net 或 sql 服务器的版本有关,但我错了,不需要在我的列名称周围添加方括号。它无论如何都能正确处理其中的空格。