3

WHERESqlDataAdapterC# 中如何使用?

我想在文本框中获取名称并在查询中使用它,但它不起作用。

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;
4

3 回答 3

4

准备命令文本并使用参数作为搜索值。然后使用该命令文本初始化一个新的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 的性能。

这是一篇关于这个问题的非常有启发性的文章

于 2013-07-17T18:36:01.370 回答
3

因此,您非常接近,您只需要在查询中定义一个参数,然后添加该参数。但是,在下面的代码块中,我还方便地推荐了一种更合适的方法来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);
    }
}
于 2013-07-17T18:35:21.553 回答
2

尝试这个。您在查询中直接使用了字符串,而该字符串将未被检测到。

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;
于 2013-07-17T18:41:27.693 回答