2011-10-21 80 views
0

我的數據庫中有名爲ModifyUser和ModifyDate的列,它們應該顯示以某種方式更新特定產品的最後一個人的用戶名和日期和時間。嘗試插入到vb.net應用程序時出錯

我想如果我只是添加第二個查詢,那麼我會很好,但由於某種原因,應用程序也想將產品名稱添加到產品表中。爲什麼不是應用程序只是插入我告訴它插入到產品表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() 

回答

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 

請記住提供查詢的所有參數值。

+0

好點,我意識到我不想添加新產品,我想更改現有產品的一些信息。腦屁 - 我需要使用UPDATE語句。 – jlg

+0

我恰恰用於我的UPDATE語句。感謝您的幫助。 – jlg

2

貌似Product表的ProductName列已被定義爲NOT NULL

這意味着你爲它提供一個值。這確保您沒有沒有名稱的產品。

既然你是不是在此查詢供應ProductName

INSERT INTO Product (ModifyDate, ModifyUser) 
    VALUES (getdate(), @ModifyUser) 

聲明失敗。

我預計在同一張桌子上還有其他NOT NULL列。

0

ProductName中的Product不接受null。你要麼必須在產品名稱通過或更改列屬性接受空值如下

ALTER TABLE產品 ALTER COLUMN產品名稱爲nvarchar(50)NULL

0

如果「產品名稱」中的「產品」字段表被設置爲NOT NULL,數據庫將不接受任何記錄到Product表中,除非它們包含'ProductName'字段的值。

相關問題