DataTable里有一张表tableA
tableA 有三列A,C,E
目标数据库里有一张表tableB
tableB 有五列A,B,C,D,E
我现在要把tableA的A,C,E 入到 tableB的A,C,E中
string errMsg = string.Empty;
DataTable dt = tableA;
using (SqlBulkCopy desBulk = new SqlBulkCopy(connstr, SqlBulkCopyOptions.UseInternalTransaction)
{ BulkCopyTimeout = 500000000, NotifyAfter = dt.Rows.Count })
{
try
{
desBulk.DestinationTableName = "tableB";
foreach (DataColumn dc in dt.Columns)
{
desBulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
desBulk.WriteToServer(dt);
}
catch (Exception ex)
{
errMsg = ex.Message;
}
}
}结果报错给定的ColumnMappings与源或目标中的任意列均不匹配.
请问这个该如何改?谢谢
tableA 有三列A,C,E
目标数据库里有一张表tableB
tableB 有五列A,B,C,D,E
我现在要把tableA的A,C,E 入到 tableB的A,C,E中
string errMsg = string.Empty;
DataTable dt = tableA;
using (SqlBulkCopy desBulk = new SqlBulkCopy(connstr, SqlBulkCopyOptions.UseInternalTransaction)
{ BulkCopyTimeout = 500000000, NotifyAfter = dt.Rows.Count })
{
try
{
desBulk.DestinationTableName = "tableB";
foreach (DataColumn dc in dt.Columns)
{
desBulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
desBulk.WriteToServer(dt);
}
catch (Exception ex)
{
errMsg = ex.Message;
}
}
}结果报错给定的ColumnMappings与源或目标中的任意列均不匹配.
请问这个该如何改?谢谢
解决方案 »
- 如何判断机器上是否安装了PowerPoint啊?
- Spring NHbernate分页代码 提示错误"不是调试 ModuleBuilder"
- 关于picturebox作为panel的子控件,动态改变panel大小,picturebox中就无法显示
- MySQLDriverCS,如何判断数据条数为空?
- C#数据库中的难题~!!!!!求救~~!!!!
- COMBOX?
- vs2005中与打印有关的东西的问题
- 作個調查,大家用C#主要做C/S還是B/S, 用C#做C/S有優勢嗎?
- 如何点右键取选中树的一个结点
- 大家好,(在做Web的)怎么使自己的电脑成为服务器,看内宾:
- VS2010 C# 建立报表出错,提示:字段名称必须是符合 CLS 的标识符。
- Graphics 如何重绘,或清除内容
foreach (DataColumn dc in dt.Columns)
{
desBulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
这里已经让列名一致了
foreach (DataColumn dc in dt.Columns)
{
foreach (DataColumn dc2 in desBulk.Columns)
{
if(dc.ColumnName==dc2.ColumnName)
{
desBulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
}
}
/// 将DataTable中数据批量数据库表中
/// <param name="dt">源数据集</param>
/// <param name="ExcelTitle">DataTable数据题头</param>
/// <param name="DBColumnName">要插入数据的表的对应字段</param>
/// <param name="DestinationTableName">写入数据的数据库表名</param>
/// </summary>
public static void SqlBulkCopyData(System.Data.DataTable dt, string[] DataTableTitle, string[] DBColumnName, string DestinationTableName)
{
SqlConnection conn = new SqlConnection("…………………………");
//初始化连接字符串
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlBulkCopy bcp = new SqlBulkCopy(conn);
//指定目标数据库表名
bcp.DestinationTableName = DestinationTableName;
//指定源列和目标列之间的对应关系
for (int i = 0; i < DataTableTitle.Length; i++)
{
bcp.ColumnMappings.Add(DataTableTitle[i], DBColumnName[i]);
}
//写入数据库表
bcp.WriteToServer(dt);
bcp.Close();
conn.Close();
}
是啊,所以找出列名相同的,排除列名不同的,要不然会报列名不匹配的,虽然你的这个A->B不是,但是B->A就会出现这样的问题啊。
奇怪我记得不区分大小写的呀