繁体   English   中英

ExecuteNonQuery 中的 SQL 更新命令错误

[英]SQL Update command error in ExecuteNonQuery

当我尝试连接到我的数据库以在 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);
}

您的代码有几个问题

  1. UPDATE的语法不正确。 它应该是UPDATE SET columnName = value...
  2. 使用参数化查询,因为目前您的代码容易受到 SQL 注入
  3. 移动myCommand.ExecuteNonQuery(); try块内捕获任何异常

请参阅我对您的代码的更新:

var sqlstring = @"UPDATE Email SET Email = @email, Description = @description, UserName = @username, Title = @title WHERE ID = @id");

var myConnection = getconection();
SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);

// add parameters
myCommand.Parameters.AddWithValue("@email", email);
myCommand.Parameters.AddWithValue("@description", description);
myCommand.Parameters.AddWithValue("@username", userName);
myCommand.Parameters.AddWithValue("@title", title);
myCommand.Parameters.AddWithValue("@id", emailId);

try
{
    // execute the command in the try block to catch any exceptions
    myCommand.ExecuteNonQuery();
    myConnection.Close();
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

正如评论中提到的,您应该真正在HttpPost方法中执行更新并在调用UpdateDataBase()之前验证值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM