角かっこでスペースを含む列名をラップする必要があることはわかっています[]
。これは、コラムを作成するときに行い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' は、データ ソース内のどの列とも一致しません。
なぜ/どこで角かっこが取り除かれていますか? また、この問題を解決するにはどうすればよいですか?