C# 获取错误“;靠近';的语法不正确'&引用;

C# 获取错误“;靠近';的语法不正确'&引用;,c#,sql-server,syntax-error,C#,Sql Server,Syntax Error,我遇到这个错误已经有一段时间了,但仍然无法解决它。我正在尝试更新数据库中的数据,只需在windows窗体中按下一个按钮 我正在使用SQLServer2011 private void btnEdit_Click_1(object sender, EventArgs e) { MainMenu mainmenu = new MainMenu(); SqlCommand cmd = new SqlCommand("Update PresentationSpec SET Pres_na

我遇到这个错误已经有一段时间了,但仍然无法解决它。我正在尝试更新数据库中的数据,只需在windows窗体中按下一个按钮

我正在使用SQLServer2011

private void btnEdit_Click_1(object sender, EventArgs e)
{
    MainMenu mainmenu = new MainMenu();
    SqlCommand cmd = new SqlCommand("Update PresentationSpec SET Pres_name = @Pres_name, Prestor_name = @Prestor_name, Pres_Summary = @Pres_Summary, Est_Length = @Est_Length, Date_Presented = @Date_Presented WHERE Id=" + mainmenu.tbxSelected);
    cmd.Connection=connection;
    connection.Open();
    cmd.Parameters.AddWithValue("@Pres_name", tbxpresName.Text);
    cmd.Parameters.AddWithValue("@Prestor_name", tbxprstorName.Text);
    cmd.Parameters.AddWithValue("@Pres_Summary", rtbSummary.Text);
    cmd.Parameters.AddWithValue("@Est_Length", tbxLength.Text);
    cmd.Parameters.AddWithValue("@Date_Presented", tbxDate.Text);
    cmd.ExecuteNonQuery();
    this.Close();
    Form2 editscreen = new Form2();
    Refresh();
}
如果有人知道出了什么问题,请告诉我。

您正在添加

mainmenu.tbxSelected
鉴于我怀疑你的意图是

mainmenu.tbxSelected.Text
前者可能会在WHERE子句中产生一个完全限定的typename,其中包含逗号


另一方面,您应该知道,以这种方式构造SQL可能会导致SQL注入攻击。如果这是一个问题,您最好考虑使用存储过程或ORM工具(如实体框架)。

具体的texbox值是什么?没有SQL Server 2011-我们有2000、2005、2008、2008、2012、2014、,2016年和2017年-到底是哪一个?可能错误的是
主菜单的内容。tbxSelected
,我建议您检查一下。为什么您在
集合
部分中使用参数作为值,而不是
WHERE
子句??在那里也使用一个参数!这将解决您的问题第一次猜测:列
Est\u Length
Date\u呈现的sql类型是什么?您提供的参数是
string
,但我猜类型应该是
int
DateTime
。因此,您需要将
tbx.Length.Text
解析为
int
并将
tbxDate.Text
解析为
DateTime
,否则
AddWithValue
将告诉SQL这些是
nvarchar
或其他东西,这可能会导致错误。谢谢,这很有帮助!