【问题标题】:SqlBulkCopy Identity on SQL SERVERSQL SERVER 上的 SqlBulkCopy 标识
【发布时间】:2021-02-17 07:14:26
【问题描述】:

我尝试使用 SqlBulkCopy 插入数据库,但问题是 Sql 服务器上的 id 是身份 (1,1) 我收到此错误“无法将值 NULL 插入列‘二’,表‘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

【问题讨论】:

  • 添加以下内容:table.Columns["two"].AllowDBNull= true;
  • 不理解id 列和two 列上的identity(1,1) 之间的关系
  • 请显示你的SQL表的定义。
  • @demo 此表只是示例,但在 id 身份的任何地方都存在同样的问题

标签: c# sql sql-server sqlbulkcopy


【解决方案1】:

如果您的本地表定义与服务器的不匹配(它缺少标识列),那么您需要为每个列添加显式映射(区分大小写)

第一个值是本地源列的名称,第二个是目标列的名称。

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

如果名称不完全匹配,也会出现这种情况。

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 2017-01-05
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多