如何使用SQL查询在C#中删除多行?

时间:2018-11-01 04:43:09

标签: c# sql-server

我有使用SqlCommand在C#中删除一行的代码。但是我想删除多行。谁能帮我这个?我是C#的新手。

这是我的代码-请帮助。预先谢谢你。

foreach (DataGridViewRow dr in dataGrid1.SelectedRows)
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = @"Data Source=DDBULK10\SQLEXPRESS;Initial Catalog=MasterList; Integrated Security = True";
                if (dr.Index > 0)
                {
                    int selectedIndex = dataGrid1.SelectedRows[0].Index;

                    int rowID = int.Parse(dataGrid1[0, selectedIndex].Value.ToString());
                    string sql = "DELETE FROM ActiveUser WHERE EmpId = @EmpId";

                    SqlCommand deleteRecord = new SqlCommand();
                    deleteRecord.Connection = con;
                    deleteRecord.CommandType = CommandType.Text;
                    deleteRecord.CommandText = sql;

                    SqlParameter RowParameter = new SqlParameter();
                    RowParameter.ParameterName = "@EmpId";
                    RowParameter.SqlDbType = SqlDbType.Int;
                    RowParameter.IsNullable = false;
                    RowParameter.Value = rowID;

                    deleteRecord.Parameters.Add(RowParameter);

                    deleteRecord.Connection.Open();

                    deleteRecord.ExecuteNonQuery();

                    //deleteRecord.Connection.Close();

                    MessageBox.Show("Record Successfully Deleted");

                    SqlDataAdapter sda = new SqlDataAdapter("select * from ActiveUser", con);
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    dataGrid1.DataSource = dt;
                }

                else if (dialogResult == DialogResult.No)
                {
                    this.Refresh();
                }
            }

3 个答案:

答案 0 :(得分:0)

您可以建立一个逗号分隔的用户ID列表,例如-

string strUserIds = string.Empty();
for(int i=0; i<dataGrid.Count;i++)
{
  strUserIds = strUserIds +","+ dataGrid.SelectedRows[0].Cells[0].Value;
}
--Remove last unwanted comma from strUserIds 
then execute sql query as "DELETE FROM EmployeeTbl WHERE  UserID in (" + strUserIds + ")"

这将从表中删除多个记录。

答案 1 :(得分:0)

只需对您的编码进行一些更改!

  1. 删除所有选定的行
  2. 从ActiveUser运行您的选择*

    public void deldata()     {         foreach(dataGrid1.SelectedRows中的DataGridViewRow dr)         {             SqlConnection con =新的SqlConnection();             con.ConnectionString = @“数据源= DDBULK10 \ SQLEXPRESS;初始目录= MasterList;集成安全性= True”;             如果(dr.Index> 0)             {                 int selectedIndex = dataGrid1.SelectedRows [0] .Index;

                int rowID = int.Parse(dataGrid1[0, selectedIndex].Value.ToString());
                string sql = "DELETE FROM ActiveUser WHERE EmpId = @EmpId";
    
                SqlCommand deleteRecord = new SqlCommand();
                deleteRecord.Connection = con;
                deleteRecord.CommandType = CommandType.Text;
                deleteRecord.CommandText = sql;
    
                SqlParameter RowParameter = new SqlParameter();
                RowParameter.ParameterName = "@EmpId";
                RowParameter.SqlDbType = SqlDbType.Int;
                RowParameter.IsNullable = false;
                RowParameter.Value = rowID;
    
                deleteRecord.Parameters.Add(RowParameter);
    
                deleteRecord.Connection.Open();
    
                deleteRecord.ExecuteNonQuery();
    
                //deleteRecord.Connection.Close();
    
                MessageBox.Show("Record Successfully Deleted");
    
    
            }
    
            else if (dialogResult == DialogResult.No)
            {
                this.Refresh();
            }
        }
    }
    public void showdata()
    {
        SqlDataAdapter sda = new SqlDataAdapter("select * from ActiveUser", con);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        dataGrid1.DataSource = dt;
    }
    

答案 2 :(得分:0)

您可以使用类似这样的东西;我没有测试代码,但是如果您创建所需的参数,它应该可以工作,在运行代码之前,您必须先创建一个type table, please see the link for details

 using (connection)
        {
            string sql ="Delete from YourTable t join @yourTypeTable i on t.id = i.Id:";

            SqlCommand deleteCommand = new SqlCommand(sql, connection);
            SqlParameter tvpParam = deleteCommand.Parameters.AddWithValue("@yourTypeTable", yourIdList);
            tvpParam.SqlDbType = SqlDbType.Structured;
            tvpParam.TypeName = "dbo.yourTypeTable";

            deleteCommand.ExecuteNonQuery();
        }