C# 通过事务向数据库插入多条数据(通过Hashtable存储数据)
2011-06-14 22:49
495 查看
在日常编写程序的时候我们总是会遇到一次性插入多条数据,但是这多条数据中有的数据有可能和我们数据库中字段的类型不一样或者字段类型的长短不一样导致无法插入数据库。在这种情况下我们的需求是这次插入的数据都不能被插入到数据库。方法使在C#中使用事务。
0)创建数据表
1)Web.config中添加连接数据库的语句
2)在表示层Default.aspx.cs中添加多条需要插入数据库的数据(由于name字段的长度是10,但是这里插入的“张三3张三3张三312”的长度是11所以无法插入数据库,不能提交应该回滚)。
3)在数据访问层和DbHelperSQL.cs中添加将数据插入数据库的代码如下
0)创建数据表
/****** Object: Table [dbo].[ClassDemo] Script Date: 01/29/2014 10:07:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[ClassDemo]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](10) NULL, [address] [nvarchar](10) NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
1)Web.config中添加连接数据库的语句
<add key="ConnectionString" value="server=.\sqlexpress;database=ClassDemo;uid=sa;pwd=1"/>
2)在表示层Default.aspx.cs中添加多条需要插入数据库的数据(由于name字段的长度是10,但是这里插入的“张三3张三3张三312”的长度是11所以无法插入数据库,不能提交应该回滚)。
public void Add() { List<Maticsoft.Model.ClassDemo> modellist = new List<Maticsoft.Model.ClassDemo>(); modellist.Add(new Maticsoft.Model.ClassDemo("张三1", "浙江1")); modellist.Add(new Maticsoft.Model.ClassDemo("张三2", "浙江2")); modellist.Add(new Maticsoft.Model.ClassDemo("张三3张三3张三312", "浙江3")); bll.Add(modellist); }
3)在数据访问层和DbHelperSQL.cs中添加将数据插入数据库的代码如下
/// <summary> /// 通过事务添加多条数据 /// </summary> /// <param name="modellist"></param> public void Add(List<ClassDemo> modellist) { Hashtable SQLStringList = new Hashtable(); for (int i = 0; i < modellist.Count; i++) { SqlParameter[] parameters = { new SqlParameter(string.Format("@name{0}",i), SqlDbType.NVarChar,50), new SqlParameter(string.Format("@address{0}",i), SqlDbType.NVarChar,50)}; parameters[0].Value = modellist[i].Name; parameters[1].Value = modellist[i].Address; SQLStringList.Add(string.Format("insert into ClassDemo (name,address) values (@name{0},@address{0})", i), parameters); } ExecuteSqlTran(SQLStringList); } public static string connectionString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> public static void ExecuteSqlTran(Hashtable SQLStringList) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlTransaction trans = conn.BeginTransaction()) { SqlCommand cmd = new SqlCommand(); try { //循环 foreach (DictionaryEntry myDE in SQLStringList) { string cmdText = myDE.Key.ToString(); SqlParameter[] cmdParms = (SqlParameter[])myDE.Value; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); } catch (Exception ex) { trans.Rollback(); } } } } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (SqlParameter parameter in cmdParms) { if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null)) { parameter.Value = DBNull.Value; } cmd.Parameters.Add(parameter); } } }
相关文章推荐
- C# 执行多条SQL语句,实现数据库事务(通过Hashtable存储数据) .
- C# 执行多条SQL语句,实现数据库事务(通过Hashtable存储数据) .
- c#批量插入数据到数据库【支持事务操作】
- proc 存储过程,通过存储过程往数据库的某个表中插入指定数据量的纪录,表中有primary key
- C#通过事务批量插入数据库
- Office编程(二)C#读取Excel并存入数据库,通过XML自定义表名,是否重建并插入数据
- C#:几种数据库的大数据批量插入 - faib
- c# 执行多条SQL语句,实现数据库事务 线性表 Hashtable
- C#连接数据库并插入数据
- C#:几种数据库的大数据批量插入 - faib
- 通过场景运行脚本向数据库中插入数据失败
- c# 将图片的二进制数据插入到数据库中
- c# 快速 将大量数据插入数据库
- A服务器数据库数据插入B服务器数据库(C#控制台应用程序)
- C#.NET通用权限管理在DB2数据库上运行的脚本参考 - 通过程序将数据导入到目标数据库中
- asp.net(C#) 上传Execl文件 并插入数据到数据库实例
- C# 在dataGridView中行首或行尾手动添加记录、修改一行记录(1.行尾添加,非数据库连接形式 2.修改某一行的数据 3.插入行首,不覆盖行首)
- Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中
- C#.net中批量插入数据到数据库中
- C#:30行数据插入到数据库中的效率测试-一行行执行、构造SQL一次执行、SqlBulkCopy