如何将c# datagridview选择的单元格值传递给sql查询

本文关键字:值传 sql 查询 单元格 datagridview 选择 | 更新日期: 2023-09-27 17:51:22

我有一个c#形式的数据视图,其中有大量的行。以及带有复选框的选择选项。

如果我使用复选框选择选择10行,我需要将列选择行值传递给SQL查询,以过滤来自另一个表的记录。

下面是我的代码,但它不工作,我不知道如何解决这个问题。

private void button1_Click(object sender, EventArgs e)
{
     SqlConnection conn1 = new SqlConnection(@"Data Source=.'sqlexpress;Initial Catalog=acc;Integrated Security=True");
     SqlCommand cmd1 = new SqlCommand(@"select db.date,db.type,db.refno,db.itmcod,db.qty,db.cuscod, db.cstcod,cus.cusnam INTO ##wec from fstktxn as db INNER JOIN fcustomer as cus on db.cuscod = cus.cuscod where itmcod = "dataGridView1.Rows[j].Cells["title"].Value", ", conn1);
     conn1.Open();
     cmd1.ExecuteNonQuery();
     SqlBulkCopy bulkCopy = new SqlBulkCopy(conn1);
     bulkCopy.DestinationTableName = "##tmp1";
     conn1.Close();
}

是否有任何解决方案来过滤使用gridview选择的数据?

如何将c# datagridview选择的单元格值传递给sql查询

如果我理解你的需求,你应该这样做。

首先获取datagridview数据。

DataTable data=datfridviewname.DataSource as DataTable;
                con.Open();
                SqlBulkCopy sbc = new SqlBulkCopy(con);
                sbc.DestinationTableName = @"tableName";
                sbc.WriteToServer(data);

试着阅读这个如何在SQL中使用参数化查询

它展示了如何安全地在查询中添加变量

认为你问的是"我如何使用DataGridView中选定的行来形成in查询?"。假设这是尝试,您应该将其分为两步:

  1. 获取(从UI) in查询中应该使用的一组值
  2. 编写并创建in查询

第一步可以通过迭代DataGridView.Rows来完成,并检查(假设)您拥有的DataGridViewCheckBoxColumn.Checked值;如果被选中:将过滤器值添加到某个列表中。例如:

List<string> titles = new List<string>();
foreach (GridViewRow row in dataGridView1.Rows)  
{  
    if(row.Cells["CheckBoxColumnName"].Value == true)
    {
        titles.Add((string)row.Cells["TitleColumnName"].Value);
    }
}

第二步更复杂,除非您使用像"dapper"这样的工具来自动化它。如果你使用"dapper",你可以使用:

var rows  = connection.Query<YourDataType>("...some query... where someColumn in @titles",
   new {titles}).AsList();

就是。如果没有,则需要手动编写命令,例如:

var sb = new StringBuilder("...the basic query... where someColumn in (");
int index = 0;
var cmd = new SqlCommand(connection); // see also: "using"
foreach(var title in titles) {
    if(index != 0) sb.Append(",");
    string name = "@title" + index++;
    sb.Append(name);
    cmd.Parameters.AddWithValue(name, value);
}
sb.Append(")");
cmd.CommandText = sb.ToString();

然后像往常一样执行命令。你可能也需要考虑零的情况;应该是所有行吗?没有行吗?

如果你想获得选中的复选框行,那么使用这个你可以得到它

 protected void button1_Click(object sender, EventArgs e)  
    {  
        foreach (GridViewRow gvrow in dataGridView1.Rows)  
        {  
            CheckBox chk = (CheckBox)gvrow.FindControl("chkSelect");  
            if (chk != null & chk.Checked)  
            {  
                SqlConnection conn1 = new SqlConnection(@"Data Source=.'sqlexpress;Initial Catalog=acc;Integrated Security=True");
                SqlCommand cmd1 = new SqlCommand(@"select db.date,db.type,db.refno,db.itmcod,db.qty,db.cuscod, db.cstcod,cus.cusnam INTO ##wec from fstktxn as db INNER JOIN fcustomer as cus on db.cuscod = cus.cuscod where itmcod = "dataGridView1.Cells["title"].Value", ", conn1);
                conn1.Open();
                cmd1.ExecuteNonQuery();
               SqlBulkCopy bulkCopy = new SqlBulkCopy(conn1);
               bulkCopy.DestinationTableName = "##tmp1";
               conn1.Close();//Do something 
            }  
        }         
    }