【发布时间】:2020-03-23 10:08:09
【问题描述】:
当我尝试连接到我的数据库以在 MVC 中编辑数据表时。当我尝试访问我的视图时,执行命令时出现错误。错误是:
System.Data.SqlClient.SqlException: '('附近的语法不正确。 关键字 SET 附近的语法不正确。
但我无法弄清楚我的语法错误。我是初学者,所以我还在学习基础。非常感谢任何帮助。谢谢!。这是我的代码
private void UpdateDataBase(int EmailId, string userName, string title, string Email, string description)
{
var sqlstring = string.Format("UPDATE Email (Email, Description, UserName, Title) " +
"SET ('{0}', '{1}', '{2}', '{3}')", Email, description, userName, title +
"WHERE ID=" + EmailId);
var myConnection = getconection();
SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);
myCommand.ExecuteNonQuery();
try
{
myConnection.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public ActionResult Edit (int EmailId, string userName, string title, string Email, string description)
{
UpdateDataBase(EmailId, userName, title, Email, description);
return View("EmailData");
}
[HttpPost]
public ActionResult Edit (ModelTemplateEmail EditEmailData)
{
if (ModelState.IsValid)
{
return RedirectToAction("EmailData");
};
return View(EditEmailData);
}
【问题讨论】:
-
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 C# / ADO.NET 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL 中。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
与问题没有直接关系:您在 GET 函数上调用
UpdateDataBase- 使用 MVC,您通常有一个 GET 可以为您提供输入数据的部分视图,然后是相关的 POST你检查ModelState.IsValid,如果有效,保存数据——所以你的UpdateDatabase调用应该在[HttpPost]重载中。 -
无论如何,您都需要重新阅读您的教程/示例或其他内容,因为您混淆了 UPDATE 和 INSERT 的查询结构。
-
对于这个问题,这并不重要,因为您的问题是关于创建 UPDATE 语句。对于您的应用程序,您希望使用用户输入的值进行更新,因此您的 GET 操作只需要
int EmailId从数据库中获取现有数据,然后在 POST 中使用用户在表单中输入的内容进行更新,使用您的ModelTemplateEmail中的值
标签: c# sql asp.net-mvc