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) 结果如果不选择查询

SqlDataAdapter.Fill 方法慢

SqlDataAdapter.Fill 方法慢

SqlDataAdapter#Fill:`SelectCommand.connection` 属性尚未初始化

SqlDataAdapter.Fill 运行 SQL 命令两次