因为它们太多了,例子..我在网上研究,虽然他们没有显示使用SqlBulkCopy
,在以下场景中:
我使用了一个查询,以便从 SqlServer(2008) 中获取现有数据DataTable
,以便我可以在本地对数据进行排序,并避免在处理时访问数据库。
所以现在,在那个阶段,我已经可以选择使用克隆源数据表模式localDataTable = DataTableFromOnlineSqlServer.Clone();
通过这样做Clone()
,我现在拥有所有列和每个列数据类型。
然后在程序的下一阶段,我正在DataTable
用一些新数据填充 Cloned-From-Db,即本地(但为空)新数据。
所以现在我有一个填充的DataTable
,它已经准备好存储在 sql server 中了。
使用下面的代码没有结果
public string UpdateDBWithNewDtUsingSQLBulkCopy(DataTable TheLocalDtToPush, string TheOnlineSQLTableName)
{
// Open a connection to the AdventureWorks database.
using (SqlConnection connection = new SqlConnection(RCLDBCONString))
{
connection.Open();
// Perform an initial count on the destination table.
SqlCommand commandRowCount = new SqlCommand("SELECT COUNT(*) FROM "+TheOnlineSQLTableName +";", connection);
long countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
var nl = "\r\n";
string retStrReport = "";
retStrReport = string.Concat(string.Format("Starting row count = {0}", countStart), nl);
retStrReport += string.Concat("==================================================", nl);
// Create a table with some rows.
DataTable newCustomers = TheLocalDtToPush;
// Create the SqlBulkCopy object.
// Note that the column positions in the source DataTable
// match the column positions in the destination table so
// there is no need to map columns.
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = TheOnlineSQLTableName;
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(newCustomers);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// Perform a final count on the destination
// table to see how many rows were added.
long countEnd = System.Convert.ToInt32(
commandRowCount.ExecuteScalar());
retStrReport += string.Concat(string.Format("Ending row count = {0}", countEnd), nl);
retStrReport += string.Concat("==================================================", nl);
retStrReport += string.Concat(string.Format("{0} rows were added.", countEnd - countStart),nl);
retStrReport += string.Concat("New Customers Was updated successfully", nl, "END OF PROCESS !");
Console.ReadLine();
return retStrReport;
}
}
现在的问题是,根本没有插入任何数据。
我进行了一些研究,但没有适合我的解决方案我还检查以确保:
源和目标的所有列都对齐(虽然它是一个克隆所以不用担心)
Sql server 表上有一个
PK
set asIDENTITY
列
我在这里想念什么?
...我所做的“报告”,为了计算插入的行告诉
“添加了 0 行”
这就是没有错误或异常报告/抛出。