ASP MVC 3:在数据库中记录使用表单
本文关键字:记录 表单 数据库 MVC ASP | 更新日期: 2023-09-27 18:11:11
我正在尝试使用c#语言和Visual Studio 2010和SQL Server 2005数据开发一个应用程序ASP MVC 3。我想在我的数据库中做记录,但我不能,因为我输入,,,,的参数被视为NULL(当我把光标放在Insert(矩阵,…)语句中的参数上时,编辑器告诉我它们是NULL)
应用程序显示的错误:
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);
By this:
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), @ passWord nv'期望参数@ Club number未指定
您可能会混淆数据库空值和c#空值。尝试发送DBNull。null值的值。
另外,我建议您使用参数化查询。它们使您的代码更容易阅读,并避免严重的安全问题(即使这只是作业,最好实践安全代码)。
类似这样的东西(没有测试,但概念在这里)…
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);
首先,正如Nomad101所建议的,您需要确保您的post字段已被填充,并且您的控制器方法具有[HttpPost]属性,并调试/步骤到您的代码中以验证值已填充。
第二,你创建查询的方式让你很容易受到黑客攻击。永远不要将参数连接到查询中。我注意到Brian在我输入这篇文章时发布了正确方法的描述。此外,您还需要了解我在这里提到的数据访问对象设计模式。