C# 解释一下代码,下面是段删除datagridview中选定的行的代码,先选择行,点击删除按钮,删除该行

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 (");//为什么要加括号呢?当Anumber在括号里?
foreach (DataGridViewRow row in dataGridView1.SelectedRows)//这句什么意思
{
sub.Append(row.Cells[0].Value.ToString() + ",");//这句
}
sub.Remove(sub.Length - 1, 1); //删除最后一个逗号,这句
sub.Append(")");//这句
string str_del = sub.ToString();//这句
SqlCommand cmd = new SqlCommand(str_del, con);
cmd.ExecuteNonQuery();
MessageBox.Show("删除成功!");
解释上面我标记的代码!!
谁能给我介绍一下StringBuilder 的用法和作用意思?????????????????????????????

in(“ 这是半个SQL 语句, 里面 应该是个参数 当Anumber 在 你的参数值里面的数据 例如 in(1,2)。
foreach (DataGridViewRow row in dataGridView1.SelectedRows)//这句 就是定义个DataGridViewRow 在你选中的行里面,也就是dataGridView1.SelectedRows,
下面那句就是 给你的in里面增加参数 参数值为row.Cells[0].Value.ToString() + ","。
因为in(里面的 参数格式 应该是 1,2) 而你获取到的参数是 1,2, 多了个逗号,所以要删除最后一个逗号,才能执行SQL语句。
然后下一句就是 把SQL 语句终结了。。就是 in的后半部分 ”) 组成了 in(“1,2”) 这样的结果。
下面那句就是把你拼接的SQL 赋值给个string类型的变量。 放到SqlCommand这里面。

分都没有。。真吝啬哦。。
温馨提示:答案为网友推荐,仅供参考
第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("删除成功!");本回答被提问者采纳