我的数据库中有一些名为ModifyUser和ModifyDate的列,它们应该显示最后一个以某种方式更新特定产品的人的用户名和日期和时间。
我想如果我刚刚添加了第二个查询,那么我会没事的,但由于某种原因,应用程序也希望将ProductName添加到Product表中。为什么应用程序只是插入我告诉它插入产品表INSERT中的2个值?
Error message: Cannot insert the value NULL into column 'ProductName', table
'Products.dbo.Product'; column does not allow nulls. INSERT fails.
The statement has been terminated.
'SQL INSERT: CompanyLink Table
Dim strSQL As String = "INSERT INTO CompanyLink (ProductID, CompanyID)
VALUES (@ProductID, @CompanyID);INSERT INTO Product (ModifyDate, ModifyUser)
VALUES (getdate(), @ModifyUser)"
Using cn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)
Using cmd As New SqlCommand(strSQL, cn)
cmd.Parameters.Add(New SqlParameter("@ProductID", ProductID.Value))
cmd.Parameters.Add(New SqlParameter("@CompanyID", company.Value))
cmd.Parameters.Add(New SqlParameter("@ModifyUser",
System.Web.HttpContext.Current.User.Identity.Name))
cn.Open()
cmd.ExecuteNonQuery()
答案 0 :(得分:2)
看起来ProductName
表的Product
列已定义为NOT NULL
。
这意味着您拥有为其提供值。这可以确保您没有没有名称的产品。
由于您未在此查询中提供ProductName
:
INSERT INTO Product (ModifyDate, ModifyUser)
VALUES (getdate(), @ModifyUser)
声明失败。
我希望同一个表上还有其他NOT NULL
列。
答案 1 :(得分:1)
错误消息非常明确:您未提供ProductName
,这是必填(NOT NULL
)字段。
为了解决这个问题,你必须提供ProductName
,修改它:
INSERT INTO Product (ModifyDate, ModifyUser, ProductName)
VALUES (getdate(), @ModifyUser, @ProductName)
并添加:
cmd.Parameters.Add(New SqlParameter("@ProductName", SomeVariableContainingProductName))
<强>更新强>
由于您真正需要的是更新,您的陈述将是:
Update product
set ModifyDate = getdate(),
ModifyUser = @ModifyUser
where ProductID = @ProductID
请记住为查询提供所有参数值。
答案 2 :(得分:0)
Product中的ProductName不接受null。您要么必须传递ProductName,要么将列属性更改为接受空值,如下所示
ALTER TABLE产品 ALTER COLUMN ProductName nvarchar(50)NULL
答案 3 :(得分:0)
如果'Product'表中的'ProductName'字段设置为NOT NULL,则数据库将不接受Product表中的任何记录,除非它们包含'ProductName'字段的值。