如何在C#中的SqlDataAdapter中使用WHERE

本文关键字:WHERE SqlDataAdapter 中的 | 更新日期: 2023-09-27 18:22:48

如何在C#中的SqlDataAdapter中使用WHERE

我想在一个文本框中获得名字,并在查询时使用它,但它不起作用。

SqlConnection sqlconnection = new SqlConnection("Server=Behnam''Accounting;Initial Catalog=Accounting;Integrated Security=TRUE");
DataTable dt = new DataTable();
string _search_name = txt_search.Text;
SqlDataAdapter SDA = new SqlDataAdapter("SELECT dbo.tbl_user.field1,dbo.tbl_user.field2 FROM tbl_user WHERE dbo.tbl_user.name=_search_name ", sqlconnection);
SDA.Fill(dt);
dataGridView1.DataSource = dt;

如何在C#中的SqlDataAdapter中使用WHERE

准备命令文本并使用一个参数作为搜索值。然后使用该命令文本初始化一个新的SqlCommand。用AddWithValue填充参数值,并将SqlCommand传递给SqlDataAdapter的构造函数。

string cmdText = "SELECT dbo.tbl_user.field1,dbo.tbl_user.field2 " +  
                 "FROM tbl_user WHERE dbo.tbl_user.name=@search_name"
SqlCommand cmd = new SqlCommand(cmdText, sqlconnection);
cmd.Parameters.AddWithValue("@search_name", _search_name);
SqlDataAdapter SDA = new SqlDataAdapter(cmd);

SqlDataAdapter将您的命令存储为SelectCommand属性,并将使用传入的SqlCommand执行查询以从数据库中检索记录。

请记住,AddWithValue是一种有一些缺点的快捷方式。例如,它总是传递一个字符串作为nvarchar参数,其大小等于变量的实际长度。这会有效地降低Sql Server Optimizer的性能。

这是一篇关于

问题的非常有启发性的文章

所以,您非常接近,只需要在查询中定义一个参数,然后添加该参数。然而,在下面的代码块中,我还方便地推荐了一种更适合using的方法——获取数据所需的类(双关语)。这里的using语句确保了在你使用完对象后,它们会得到正确的处理(伙计,我就是不能停止双关语!)

using (SqlConnection c = new SqlConnection(connString))
{
    c.Open();
    using (SqlDataAdapter sda = new SqlDataAdapter(
        "SELECT dbo.tbl_user.field1, dbo.tbl_user.field2 FROM tbl_user " +
        "WHERE dbo.tbl_user.name= @name", c))
    {
        sda.SelectCommand.Parameters.AddWithValue("@name", txt_search.Text);
        DataTable dt = new DataTable();
        sda.Fill(dt);
    }
}

试试这个。您直接在查询中使用了该字符串,这将不会被发现。

SqlConnection sqlconnection = new SqlConnection("Server=Behnam''Accounting;
Initial Catalog=Accounting;Integrated Security=TRUE");
DataTable dt = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter("SELECT dbo.tbl_user.field1,dbo.tbl_user.field2 FROM tbl_user WHERE dbo.tbl_user.name=@searchName" , sqlconnection);
SDA.SelectCommand.Parameters.AddWithValue("@searchName", txt_search.Text);        
SDA.Fill(dt);
dataGridView1.DataSource = dt;