SqlDataAdapter.Fill() "=" C# 附近的语法不正确
Posted
技术标签:
【中文标题】SqlDataAdapter.Fill() "=" C# 附近的语法不正确【英文标题】:SqlDataAdapter.Fill() incorrect syntax near "=" C# 【发布时间】:2018-06-22 05:31:01 【问题描述】:我收到了这个错误
“=”附近的语法不正确
我收到这个错误就行了
sda.Fill(dt);
我不知道我犯了什么错误。我浏览了很多文章,但没有一篇能帮助我解决我的问题。
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\TECHNOGEEKZ\Desktop\USSv0.1\USSv0.1\USSv0.1\db\Database.mdf;Integrated Security=True");
con.Open();
SqlDataAdapter sda = new SqlDataAdapter("SELECT name FROM attachments WHERE idno = " + comboBox1.Text + "", con);
DataTable dt = new DataTable();
sda.Fill(dt);
comboBox2.DataSource = dt;
comboBox2.DisplayMember = "name";
comboBox2.ValueMember = "name";
数据库表的样子
CREATE TABLE [dbo].[attachments]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[idno] INT NULL,
[name] VARCHAR (MAX) NULL,
[location] VARCHAR (MAX) NULL
);
有人可以解决这个错误吗?这段代码到底哪里出错了?
【问题讨论】:
我认为 comboBox1.Text 是一个空洞。 @PepitoSh 是的,我刚刚检查过它是空的。非常感谢它的帮助!! SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 【参考方案1】:首先,尝试返回comboBox1.Text
,看看它返回的是哪个值。假设它返回一个空的 null 值或不是整数,您的查询将是错误的。
其次,您应该使用参数,而不是直接将comboBox1.Text
传递给您的SQL 查询。
它有助于减少像现在这样的荒谬错误,以及防止 SQL 注入。
将您的 sda
更改为:
SqlDataAdapter sda = new SqlDataAdapter("SELECT name FROM attachments WHERE idno = @idNo", con);
sda.SelectCommand.Parameters.AddWithValue("@idNo",comboBox1.Text);
【讨论】:
可笑有点刺耳。 @EzLo 试着强调一下。一旦她记住并应用它,我们将在未来减少有 SQL 注入的网站数量:) 但是@Ashwini Nemade。请不要有受伤的感觉,这只是一些经验,为了你自己好以上是关于SqlDataAdapter.Fill() "=" C# 附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章
SqlDataAdapter.Fill(DataGridView.DataSource) 复制所有行
SqlClient.SqlDataAdapter.Fill(DataSet) 结果如果不选择查询