(转)神奇的事物回滚!
时间:2011-05-28 来源:wowait2
亲爱的读者们,在你们插入多行数组时,是不是经常磁到这样的问题:如果多行数据中有一行出现错误那么会在数据库中插入多行空行或将前面的数据插入,这样我们也不知道插入成功了哪些数据,这样浪费了极大的空间,也影响子数据的准确,今天我们就来解决这个问题!
今天我们就用事物回滚来解决这些问题:
代码如下:
主窗体界面:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace 事务回滚 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ListViewItem lvi = new ListViewItem(); lvi.Text = txtstuid.Text; lvi.SubItems.AddRange(new string[] { txtstuname.Text, txtteamid.Text }); listView1.Items.Add(lvi); } private void Form1_Load(object sender, EventArgs e) { listView1.Columns.Add("编号", 100, HorizontalAlignment.Left); listView1.Columns.Add("姓名", 100, HorizontalAlignment.Left); listView1.Columns.Add("班级号", 100, HorizontalAlignment.Left); listView1.View = View.Details; listView1.MultiSelect = true; listView1.FullRowSelect = true; } private void button2_Click(object sender, EventArgs e) { DBHelper db=new DBHelper(); string[] sql = new string[listView1.Items.Count]; //建立一个数组,并将listview中的值赋给数组 for (int i = 0; i < listView1.Items.Count; i++) { sql[i] = string.Format("insert into stuinfo values('{0}','{1}')", listView1.Items[i].SubItems[1].Text, listView1.Items[i].SubItems[2].Text); } if (db.InsertStuinfo(sql)) { MessageBox.Show("成功"); } else { MessageBox.Show("失败"); } } } } DBHeper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace 事务回滚 { class DBHelper { SqlConnection conncetion = new SqlConnection("server=.;database=stu;uid=sa;pwd=123"); public bool InsertStuinfo(string[] sql) { bool b = false; conncetion.Open(); //事物的开始 //我们要记住事物是有开始和结束的 SqlTransaction tran = conncetion.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conncetion; //将事物赋给cmd命令参数中的Transaction cmd.Transaction = tran; //分别进行循环插入;并提交事物 try { for (int i = 0; i < sql.Length; i++) { if (sql[i]== null ||sql[i]=="") { continue; } //给cmd中的CommandText赋予sql语句 cmd.CommandText = sql[i]; //去执行命令 cmd.ExecuteNonQuery(); } tran.Commit(); b = true; } catch (Exception) { //出现异常,则回滚事物删除以前插入的 tran.Rollback(); } finally { conncetion.Close(); } return b; } } }
好亲爱的朋友们,看这些代码后,我们已经知道了,事物回滚的作用了吧,感谢朋友们对我的支持!
相关阅读 更多 +