簡體   English   中英

SQL SERVER 上的 SqlBulkCopy 標識

[英]SqlBulkCopy Identity on SQL SERVER

我嘗試使用 SqlBulkCopy 插入到數據庫,但問題是當 Sql 服務器上的 id 為 identity(1,1) 時,我收到此錯誤“無法將 NULL 值插入列 'two', 表 'mydb.dbo.test'; 列沒有不允許空值。插入失敗。”

string connString = string.Format("Data Source={0};Initial Catalog={1};Integrated Security=True",DbServer,databaseName);
            DataTable table = new DataTable("test");
            //table.Columns.Add("id");
            table.Columns.Add("one", typeof(int));
            table.Columns.Add("two", typeof(int));

            DataRow row = table.NewRow();
            row["one"] = 1;
            row["two"] = 2;
            table.Rows.Add(row);

            DataRow row2 = table.NewRow();
            row2["one"] = 1;
            row2["two"] = 2;
            table.Rows.Add(row2);

            SqlBulkCopy bulk = new SqlBulkCopy(connString);
            bulk.DestinationTableName = "test";

            try
            {

                bulk.WriteToServer(table);
                bulk.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("error. {0}", ex.Message);
            }
            finally
            {
                bulk.Close();
            }

編輯表方案:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[test](
    [id] [INT] IDENTITY(1,1) NOT NULL,
    [one] [INT] NOT NULL,
    [two] [INT] NOT NULL,
 CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

如果您的本地表定義與服務器的(缺少標識列)不匹配,則您需要為每一列添加顯式映射(區分大小寫)

第一個值是本地源列的名稱,第二個值是目標列名稱。

bulk.ColumnMappings.Add("one", "one");
bulk.ColumnMappings.Add("two", "two");

如果名稱不完全匹配,情況也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM