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:语法错误的主要内容,如果未能解决你的问题,请参考以下文章