System.Data.SqlClient.SqlException:语法错误

Posted

技术标签:

【中文标题】System.Data.SqlClient.SqlException:语法错误【英文标题】:System.Data.SqlClient.SqlException: Incorrect syntax error 【发布时间】:2019-10-26 11:06:37 【问题描述】:

我正在尝试创建一个管理仪表板,并在同一个仪表板中选择添加文章。出于某种原因,我收到此错误:

System.Data.SqlClient.SqlException:关键字“文件”附近的语法不正确。

这是我用于我正在尝试构建的“新闻门户”的代码的一部分。这是仪表板 aspx 页面背后的服务器端代码。

protected void Publish_Click(object sender, EventArgs e)

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

    con.Open();
    string command = "INSERT INTO Articles(title,author,content,file,tags) VALUES(@title,@author,@content,@file,@tags)";
    SqlCommand cmd = new SqlCommand(command, con);

    cmd.Parameters.AddWithValue("@title", Title1.Text);
    cmd.Parameters.AddWithValue("@author", Author.Text);
    cmd.Parameters.AddWithValue("@content", Content.Text);
    string strImg = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    cmd.Parameters.AddWithValue("@file", strImg);
    cmd.Parameters.AddWithValue("@tags", Tag.Text);
    cmd.ExecuteNonQuery();
    con.Close();
    File1.PostedFile.SaveAs(Server.MapPath("Images\\") + strImg);

我每次按“发布”按钮时都会收到此错误。

【问题讨论】:

您应该查看Can we stop using AddWithValue() already? 并停止使用.AddWithValue() - 它可能会导致意想不到和令人惊讶的结果... 【参考方案1】:

这可能是因为file 是reserved word,所以你需要用方括号括起来:

string command = "INSERT INTO Articles(title,author,content,[file],tags) VALUES(@title,@author,@content,@file,@tags)";

【讨论】:

感谢您的回复!错误消失了,但出现了一个新错误。 “System.Data.SqlClient.SqlException:不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。” 所以您的 file 列是 varbinary(max) 但您正试图插入一个字符串反对它。您将需要查找如何使用查询将二进制文件保存到 sql server,而不仅仅是文件名。如果您仍然遇到麻烦,您应该问另一个问题,概述您对此进行了哪些研究。 @marom,同时避免使用AddWithValue,而是指定正确的 SQL 数据类型。 VarBinary 最大长度为 -1 适合 varbinary(MAX) 并且您的客户端类型应该是字节数组。

以上是关于System.Data.SqlClient.SqlException:语法错误的主要内容,如果未能解决你的问题,请参考以下文章