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

3

如何在C#中使用SqlDataAdapterWHERE语句?

我想在查询时从文本框中获取名称并将其用作条件,但它不起作用。

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;

使用一些答案中提到的SQL参数。http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx。这可以防止SQL注入http://en.wikipedia.org/wiki/SQL_injection。 - Jason Down
@evanmcdonnal:针对您的问题(来自您现已删除的答案的评论)关于addwithvalue如何防止SQL注入,请参考此答案:https://dev59.com/Rk_Sa4cB1Zd3GeqP8w1m#3243210 - Jason Down
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 将以传入的 SqlCommand 执行查询以从数据库中检索记录,并将您的命令存储为 SelectCommand 属性。请记住,AddWithValue 是一种带有某些缺点的快捷方式。例如,它总是将字符串作为 nvarchar 参数传递,并设置大小等于变量的实际长度。这有效地降低了 Sql Server 优化器的性能。本文是一个非常有启发性的文章,可以在此处阅读

3

所以,你很接近了,只需要在查询中定义一个参数,然后添加该参数即可。但是,在下面的代码块中,我还方便地推荐了一种更合适的方法来使用获取数据所需的类(这是个双关语)。此处的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);
    }
}

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;

我刚刚删除了我的评论,现在给了你一个+1 ;) - Jason Down

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接