【问题标题】:Cannot insert NULL value into SQL table column which is defined as auto increment无法将 NULL 值插入定义为自动增量的 SQL 表列
【发布时间】:2014-10-08 09:36:39
【问题描述】:

我有一个员工表,其中 id 定义为自动递增

架构:

employee(id, name, company, salary, age)

insert into employee(name, company, salary, age) 
values('John', 'ABC', 90000, 30);

这行得通。然而,当通过 asp.net 做同样的事情时

SqlConnection xconn = new SqlConnection();
xconn.ConnectionString = @"";  //connection details go here
xconn.Open()

String query = "insert into employee(name, company, salary, age) values(@name, @company, @salary, @age)";
SqlCommand ycmd = new SqlCommand(query, xconn);
ycmd.Parameters.Add("@name", name);
ycmd.Parameters.Add("@company", company);
ycmd.Parameters.Add("@salary", salary);
ycmd.Parameters.Add("@age", age);
ycmd.ExecuteNonQuery();

这里name, company, salary, age 包含相应的值。

我遇到了异常

无法将值 NULL 插入列 ID,列不允许空值

【问题讨论】:

  • 是的。但它是自动递增的。那么为什么在未指定时会抛出错误。我通过 sql 控制台做了同样的事情,效果很好。
  • 这可能与您当前遇到的问题无关,但请始终尝试对您的SqlConnectionSqlCommand 对象使用using 语句,以便适当释放这些对象占用的资源。
  • 一般说明,我不确定这是否会导致它,但您应该使用Parameter.AddWithValue,因为Parameter.Add 已弃用。同样正如@DennisR 所说,您应该使用using 语句。
  • 这里可能有问题,但 Parameter.Add() 看起来不正确。第二个参数应该是数据类型。 Refer to
  • 我只是在这里检查...您的意思是自动递增,IDENTITY (1,1) 紧吗?另外,您可以右键单击表格并生成一个 CREATE 脚本然后将其粘贴到这里吗?

标签: c# sql asp.net sql-server tsql


【解决方案1】:

我看不出代码有什么问题。我会检查您网页中的连接字符串是否指向与插入在查询分析器中工作的服务器和数据库相同的服务器和数据库。您还可以检查员工表上是否有触发器正在更新另一个表并导致恶作剧。

【讨论】:

  • 我也看到过这种情况,表在一台服务器上具有标识,但由于某种原因它没有在另一台服务器上设置,导致代码中断。
  • 问题不在于连接字符串,因为它可以完美地找到数据库和表。我认为此时查看表的创建语句将是最有帮助的
【解决方案2】:

我认为您的 SqlCommand 对象正在执行与您编写的不同的 SQL。使用 SQL 分析器查看实际执行的内容。

您还应该使用 AddWithValue,或遵循不同的调用模式:Difference with Parameters.Add and Parameters.AddWithValue。这很可能会导致与您使用 Add() 调用的意图不同的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多