1

因为它们太多了,例子..我在网上研究,虽然他们没有显示使用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;
        }
}

现在的问题是,根本没有插入任何数据。

我进行了一些研究,但没有适合我的解决方案我还检查以确保:

  1. 源和目标的所有列都对齐(虽然它是一个克隆所以不用担心)

  2. Sql server 表上有一个PKset asIDENTITY

我在这里想念什么?

...我所做的“报告”,为了计算插入的行告诉

“添加了 0 行”

这就是没有错误或异常报告/抛出。

4

0 回答 0