【问题标题】:Issue with SQL Data Adapter Search functionSQL 数据适配器搜索功能问题
【发布时间】:2014-02-11 01:30:12
【问题描述】:

这是我的代码,我正在尝试在我的应用程序中实现搜索功能:

private void button1_Click(object sender, EventArgs e)
{
     SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30");

     SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM SuperCars where Car like " + textBox1.Text, conn);
     DataTable dt = new DataTable();
     SDA.Fill(dt);
     dataGridView1.DataSource = dt;                    
}

当我尝试在我的数据库中搜索时,例如“Bugatti”,它显示“无效的列名 'Bugatti'”。也许这是我的一个简单的错误,但我找不到它..

【问题讨论】:

    标签: c# database winforms search


    【解决方案1】:

    问题:您没有通过忽略单引号正确提供 Search 参数。

    解决方案:您需要将String类型包含在single quotes中。

    建议:您的SELECT 查询容易受到 SQL 注入攻击。您需要使用参数化 SQL 查询来避免这种情况。

    参数化查询有助于隐式传递有效类型的参数。

    例如,在使用参数化查询传递参数时,您不需要将字符串类型用单引号括起来

    解决方案 1: 不使用参数化查询

    SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM SuperCars where Car like '" + textBox1.Text+"'", conn);
    

    解决方案 2: 使用参数化查询

    SqlCommand sqlcmd = new SqlCommand("SELECT * FROM SuperCars where Car like @Car);
    sqlcmd.Parameters.AddWithValue("@Car","%"+textBox1.Text+"%");
    

    【讨论】:

    • 再次查看您的参数化查询解决方案。这是完全错误的。缺少双引号,错误使用类似部分..
    • @SonerGönül:感谢您的宝贵意见。现在也添加了搜索代码。
    【解决方案2】:

    使用 parameterized queries. 代替字符串连接。在这种串联中,您很容易忘记一些引号等。

    SQL Injectionattakcs容易阅读和防范。

    SqlCommand cmd = new SqlCommand(@"SELECT * FROM SuperCars where Car like '%@car%'");
    cmd.Parameters.AddWithValue("@car", textBox1.Text);
    SqlDataAdapter SDA = new SqlDataAdapter(cmd.CommandText, conn);
    

    也可以使用using Statement 来处理你的SqlConnection 赞;

    using(SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\dido\documents\visual studio 2012\Projects\CourseProjectCars\CourseProjectCars\DataCars.mdf;Integrated Security=True;Connect Timeout=30"))
    {
      //
    }
    

    【讨论】:

    • 这一切看起来不错,但现在这部分有一个错误:SqlDataAdapter SDA = new SqlDataAdapter(cmd, conn);它有一些无效的参数。
    • @Cathy 现在看看。 SqlDataAdapter 没有构造函数,将 SqlCommandSqlConnection 作为参数。我将 cmd 更改为 cmd.Text 以获得正确的构造函数。
    • 现在 cmd.Text 中的 Text 部分有下划线,错误是 Text 没有定义....
    • @Cathy 很抱歉。它是CommandText 而不是Text。再看一遍。
    • @Cathy 您是否在数据库的服务器资源管理器中尝试了最终的SqlCommand?当您在数据库上尝试它时,它会得到行吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多