2013-04-28 57 views
0

我正在嘗試使用C#語言和Visual Studio 2010和SQL Server 2005數據開發應用程序ASP MVC 3。 我想在我的數據庫中創建記錄,但是我不能,因爲我輸入的參數是,,,,被視爲NULL(當我將光標放在Insert(matricule,...)語句中的參數上時,編輯告訴我,他們是NULL)ASP MVC 3:使用表格在數據庫中記錄

這是該應用程序顯示錯誤:

The INSERT statement is in conflict with the FOREIGN KEY constraint "FK_Users_Account". The conflict occurred in database "Range" table "dbo.Account", column 'Type_User'. 

該語句已終止。

PS 當我改變這樣的說法:

SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, Nom_User,PassWord, Type_User)Values('"+Matricule+"','"+Nom_User+"','"+passWord+"','"+Type_User+"')", cn); 

通過這樣的:

SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, Nom_User,PassWord, Type_User)Values('user2','anouar','anouar','Admin')", cn); 

它的工作手動這意味着沒有把價值形式


感謝答案,我改變了這樣的代碼,但始終是相同的問題:

public int Insert(string Matricule, string Nom_User, string passWord, string Type_User, string ID_UF) 
    { 
     SqlConnection cn = new SqlConnection(@"Data Source = SWEET-DE396641E \ SQLEXPRESS; User Id = adminUser; Password = adminUser; Initial Catalog = Gamme"); 
     cn.Open(); 


     string sqlquery = ("Insert Into Users(Matricule, Nom_User,PassWord, Type_User, ID_UF)Values(@Matricule, @Nom_User, @passWord, @Type_User, @ID_UF)"); 
     SqlCommand cmd = new SqlCommand(sqlquery, cn); 


     cmd.Parameters.AddWithValue("@Matricule", this.Matricule); 
     cmd.Parameters.AddWithValue("@Nom_User", this.Nom_User); 
     cmd.Parameters.AddWithValue("@passWord", this.passWord); 
     cmd.Parameters.AddWithValue("@Type_User", this.Type_User); 
     cmd.Parameters.AddWithValue("@ID_UF", this.ID_UF); 
     return cmd.ExecuteNonQuery(); 
    } 

和這個錯誤: 的參數化查詢 '(@ Matricule爲nvarchar(4000),@ USER_NAME爲nvarchar(4000),@密碼NV' 預計參數@俱樂部次數尚未指定。

+0

你確定表單發佈了正確的值嗎? – Nomad101 2013-04-28 23:43:59

+0

添加中斷點,檢查控制器中'Type_User'的值。爲了將'Type_User'值插入'Users'表中,該值必須在'Account'表中可用。 – adatapost 2013-04-29 02:47:07

回答

0

您可能會混淆數據庫空值和c#空值。嘗試在DBNull.Value中發送任何空值。

此外,我會建議您使用參數化查詢。它們使您的代碼更易於閱讀並避免嚴重的安全問題(即使這只是作業,最好是練習安全代碼)。

像這樣的東西(未測試,但概念是在這裏)...

SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, Nom_User,PassWord, Type_User)Values(@Matricule, @Nom_User, @passWord, @Type_User)", cn); 
cmd.Parameters.Add("@Matricule", Matricule ?? DBNull.Value); 
cmd.Parameters.Add("@Nom_User", Nom_User?? DBNull.Value); 
cmd.Parameters.Add("@PassWord", PassWord?? DBNull.Value); 
cmd.Parameters.Add("@Type_User ", Type_User ?? DBNull.Value); 
0

首先,作爲Nomad101建議,你需要確保你的後場被填充,您的控制器方法在其上具有[HttpPost]屬性並調試/步入代碼以驗證值是否已填充。

其次,您創建查詢的方式會讓您對黑客攻擊敞開大門。永遠不要將參數連接到查詢中。我注意到,當我輸入這個時,Brian發佈了正確方法的描述。此外,您還需要了解我提到的here的數據訪問對象設計模式。