【发布时间】: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