第1个回答 2011-11-16
这是一个删除多行数据的功能。
1: StringBuilder sub = new StringBuilder("delete from " + this.Text.Substring(11) + " where Anumber in (");//初始化StringBuilder ,初始值:"delete from " + this.Text.Substring(11) + " where Anumber in ("。看清楚这里只有一个"(",这是拼接到sql语句 in(1,2,3)这样的。最后一个括号是实例化StringBuilder的。此时sub的值:delete from A(表名) where Anumber in (。
2:sub.Append(row.Cells[0].Value.ToString() + ",");//将第一列的值(应该是ID),拼接到sql语句中。foreach后sub的值:delete from A(表名) where Anumber in (1,2, --假设循环两次。
3:sub.Remove(sub.Length - 1, 1); //上面foreach循环拼接Sql语句时,每个后面都有个逗号,所以最后一个逗号要删除,此时sub的值:delete from A(表名) where Anumber in (1,2
4:sub.Append(")");//追加一个“)”。此时sub的值:delete from A(表名) where Anumber in (1,2)
最后执行sql语句。删除多条数据。
第2个回答 推荐于2017-10-01
if (MessageBox.Show("是否要删除行?", "删除确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{
SqlConnection con = new SqlConnection("Server=.\\SQLEXPRESS;uid=sa;pwd=59365615;Database=Attendance Manage");
con.Open();
StringBuilder sub = new StringBuilder("delete from " + this.Text.Substring(11) + " where Anumber in (" );//实际上就是用 StringBuilder来拼接出sql语句 最后要得到的语句就是 Delete from xx Where Anumber in(xx, xx, xx),不要被括号迷惑了," where Anumber in (" 是字符串 後面的 ) 是 StringBuilder sub = new StringBuilder( )的反括号
foreach (DataGridViewRow row in dataGridView1.SelectedRows)//这句的意思是循环获取dataGridView1选定的 行,dataGridView1.SelectedRows是选定的行的集合,也就是说可能是N多个行,用foreach去循环获取行
{
sub.Append(row.Cells[0].Value.ToString() + ",");//获取选定行的第一个单元格的值,加上一个逗号后,追加到“Delete from xx Where Anumber in( ”这个字符串的後面
}
sub.Remove(sub.Length - 1, 1); //删除最后一个逗号,这句 因为最後得到的sql命令字串是Delete from xx Where Anumber in(xx, xx, xx, 的,後面是多出一个逗号的,这样sql命令式错误的,所有要去掉逗号,这个去掉逗号的写法不是很好
sub.Append(")");// 命令还只是Delete from xx Where Anumber in(xx, xx, xx 缺个反括号,这句就是加上反括号
string str_del = sub.ToString();//很简单sub对象转换成字符串就sql命令了 最终的Delete from xx Where Anumber in(xx, xx, xx)
SqlCommand cmd = new SqlCommand(str_del, con);
cmd.ExecuteNonQuery();
MessageBox.Show("删除成功!");本回答被提问者采纳