Excel到SQL。 BulkCopy的替代方案?

c# sql sqlbulkcopy

我有一段代碼使用DataReader和SqlBulkCopy將數據從excel電子表格複製到MSSQL表。它工作正常,直到我在表上創建一個主鍵,現在它失敗了。我首先刪除SQL表的內容,然後再使用excel中的數據填充它。

因為它只是我移動的少量數據,我想知道是否有比使用BulkCopy更好的方法嗎?

更新:下面是相關代碼,我收到的錯誤是:“數據源中String類型的給定值無法轉換為指定目標列的float類型。”

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

一般承認的答案

SqlBulkCopy自動映射字段。但是,由於您添加了主鍵,因此默認映射不再有效。

您必須設置ColumnMapping以明確告訴您的SqlBulkCopy對像如何映射字段。

除主鍵外(假設您在PK上使用標識),對所有字段執行此操作。

例如:

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

熱門答案

創建主鍵,表明您正在實施域約束(一件好事)。

因此,您的實際問題不是您需要另一種方法來執行批量插入, 而是您需要找出重複鍵的原因(執行PK的確切原因)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因