【问题标题】:SqlDataAdapter.Fill() incorrect syntax near "=" C#SqlDataAdapter.Fill() "=" 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

标签: c# winforms sqldataadapter


【解决方案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。请不要有受伤的感觉,这只是一些经验,为了你自己好
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2011-03-11
  • 2014-02-16
  • 2017-01-11
相关资源
最近更新 更多