首页 > 编程知识 正文

英语音标怎么读(英语音标)

时间:2023-05-05 10:58:03 阅读:67998 作者:617

事务的基本原理介绍用msdn说明:https://docs.microsoft.com/zh-cn/dotnet/api/system.data.sqlclient.sqltransaction?view=netframework-4.8

事务将一系列操作作为一个单元执行,并在成功或失败时回滚到初始状态。 整个事务将失败,除非一个参与者能够作出这一保证。 事务范围内的所有数据更改都将回滚到特定的设置点。 事务将多个操作紧密地联系在一起,以确保两个相关操作的一致性和数据完整性

另外,当提交事务的时候,所有参与者都必须保证对数据的任何更改是永久的。

要启动事务:

(1)在SqlConnection中打开事务

)2)利用SqlCommand执行事务,将事务对象和连接都分配给命令对象

(3)流程执行

(四)交办

)5)异常捕获,出现异常时,从挂起状态切换到事务trans.Rollback );

using (sqlconnection conn=new sqlconnection (sqlhelper.connstring ) )//事务启动通过conn连接. open ); sqltransactiontrans=conn.begin transaction (; //事务SqlCommand cmd=new SqlCommand (; 使用SqlCommand执行事务//为挂起的本地事务向命令对象cmd.Connection=conn分配事务对象和连接; cmd.Transaction=trans; try{foreach(intidinlistids )//进程cmd.commandtext=' updatestudentinfosetisdeleted=1where stuid=@ stuid '; sqlparameter para=new sqlparameter (' @ stuid ',id ); cmd.Parameters.Clear (; CMD.parameters.add(para ); cmd.ExecuteNonQuery () } trans.Commit ); //提交事务。 指示所有事务都已提交到数据库console.writeline (' bothrecordsarewrittentodatabase.' ); }catch(sqlexceptionex ) { trans.Rollback ); //catch特定用法,从挂起状态到事务messagebox.show(ex.message,'异常信息捕获',MessageBoxButtons.OK,MessageBoxIcon.Error ) 返回; }项目示例:就项目示例而言,数据库包含两个表:学生表和班级表。 两个表由班级编号ClassId连接在一起,因此输入信息时必须先输入班级表的ClassId,然后再输入学生表的信息。同样,在删除班级信息时,首先删除附表(有关班级的学生信息),然后是主表)

首先删除从表(学生表班),然后删除主表(班级表)

实施过程:

把执行事务封装成了一种方法。 为什么这么说,是因为一个语句只能执行一次。 例如,我现在想删除关于学生表和班级的学生信息,然后删除班级表的班级信息。

通常使用两个语句,但在此封装为一个方法。 执行多个sql语句时,只需传递参数并调用一次方法。1.首先,获取datagridview中的classId,写sql语句并添加参数

int classid=int.parse (dr [ ' classid ' ].tostring ); //与该班级对应的学生信息stringsqldelstudent=' updatestudentinfosetisdeleted=1where classid=@ classid '; //类信息stringsqldelclass=' updateclassinfosetisdeleted=1where classid=@ classid '; sqlparameter [ ] para={ new sqlparameter (' @ classid ',classid ) };2.然后我们定义一个类,负责参数传递

publicclasscommandinfo { public string commandtext; //sql或存储过程名称public DbParameter[] parameters; //参数列表公共bool is proc; //进程publiccommandinfo (stringcomtext,bool isProc,DbParameter[] para ) { this.CommandText=comText; //sql语句this.IsProc=isProc; //是否存储过程this.parameters=para; //参数列表}3.接着,将学生表和班级表的信息分别存储在通用List中

listcommandinfolistcoms=newlistcommandinfo (; commandinfocomstudent=new command info () { CommandText=sqlDelStudent,parameters=para} ); listcoms.add(comstudent ); //学生表中的sql语句和参数commandinfocomclass=new command info ({ commandtext=sqldelclass,parameters=para}; listcoms.add(comclass; //添加类表中的sql语句和参数4 .都添加成功后,只需要调用一次执行事务,方法返回bool值,如果成功,则提示异常,否则为true

bool bl=sqlhelper.excute trans (list coms ); 5 .封装的方法如下,只是取代图中的执行过程

6 .用以下内容取代:

int count=0; for(intI=0; i comList.Count; I//list中的所有变量{ cmd.commandtext=comlist [ I ].commandtext; //对于SQL语句或存储过程if(comlist[I].isproc )//存储过程(cmd.commandtype=commandtype.stored procedure; //获取存储过程的名称} else { cmd.commandtype=commandtype.text; 获取//SQL语句的文本} if (comlist [ I ].parameters.length0) /泛型参数列表的长度不为0 { cmd.Parameters.Clear ); //每次循环首先清空cmd.parameters.add range (comlist [ I ].parameters ); //添加} count =cmd.ExecuteNonQuery (; //执行事务处理并执行受影响的行数cmd.Parameters.Clear (; }至此,所需功能完成。 演示如下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。