我想知道如何在将数据添加到数据库之前,在 c# 中将数据库表中的列映射到 datatable 中。
using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
s.DestinationTableName = destination;
s.WriteToServer(Ads_api_ReportData);
}
我想知道如何在将数据添加到数据库之前,在 c# 中将数据库表中的列映射到 datatable 中。
using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
s.DestinationTableName = destination;
s.WriteToServer(Ads_api_ReportData);
}
public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize)
{
// Get the DataTable
DataTable dtInsertRows = dataTable;
using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
{
sbc.DestinationTableName = DestinationTbl;
// Number of records to be processed in one go
sbc.BatchSize = batchSize;
// Add your column mappings here
sbc.ColumnMappings.Add("field1","field3");
sbc.ColumnMappings.Add("foo","bar");
// Finally write to server
sbc.WriteToServer(dtInsertRows);
}
}
参考:如何使用SqlBulkCopyColumnMappingCollection? . .
另请参阅:http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy
这项任务变得如此普遍,以至于我为其编写了这个辅助工具:
public static void AutoMapColumns(SqlBulkCopy sbc, DataTable dt)
{
foreach (DataColumn column in dt.Columns)
{
sbc.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
}
DataTable
时,我将其列命名与SQL表相同。DataTable
的过程中,我将其列命名与对应的SQL表相同。如果源查询(或表)和目标表中的列具有相同的名称且完全相同的顺序,那么就可以知道以下信息将很有用:无需显式编写映射,因为SqlBulkCopy
将使用此默认顺序创建默认映射。
ColumnMappings集合中的Add方法允许您将源表中的列映射到目标表。ColumnMappings.Add方法接受四种不同的方式来映射您的列。
SQLBulkCopy非常严格地要求您考虑添加到ColumnMappings集合中的两个列的数据类型。
using (OleDbConnection con = new OleDbConnection(excelCS))
{
OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]", con);
con.Open();
// Create DbDataReader to Data Worksheet
DbDataReader dr = cmd.ExecuteReader();
// SQL Server Connection String
//string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
string CS = objCommon.TestConnection;
// Bulk Copy to SQL Server
SqlBulkCopy bulkInsert = new SqlBulkCopy(CS);
bulkInsert.ColumnMappings.Add("Kcode", "Kcode");
bulkInsert.ColumnMappings.Add("MDMCode", "MDMCode");
bulkInsert.DestinationTableName = "tbl_MDMKcodeMapping";
bulkInsert.WriteToServer(dr);
lblMessage.Text = "Your file uploaded successfully";
lblMessage.ForeColor = System.Drawing.Color.Green;
}
请注意,在
bulkInsert.ColumnMappings.Add("Kcode", "Kcode");
第一个参数应该是您的Excel列名,第二个参数应该是您的SQL表列名