时间:2021-07-01 10:21:17 帮助过:3人阅读
下面将为您介绍如何执行多条SQL语句,实现数据库事务的方法,供您参考,如果您对SQL语句和事务感兴趣的话,不妨一看,详细对您学习SQL大有帮助。
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static void ExecuteSqlTran(IList<string> SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
}
}
5、存储过程异常处理
编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间。
C#中可以用try。。catch不惑异常,看看数据库存储过程如何捕捉异常的
下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常的 。
1、环境
(1)数据库为Sql Server2008。
(2)表(Course)结构为:
No char(10) primary key
Name varchar(20)
Comment varchar(50)
2、存储过程
就以插入数据为例,其他的可以照着写就行了。
编程语言都有异常的捕获与处理, 在 SqlServer2008 中也是这样子的。
对会出现异常的语句加上 begin try……end try ,然后进行异常捕捉:begin catch……end catch即可。
错误代码详解 很容易就能找到。
代码如下:
1 Createproc sp_Insert_Course 2 @Nochar(10), 3 @Namevarchar(20), 4 @Commentvarchar(50), 5 @rtnint output 6 as 7 begin try 8 insertinto Course values(@No,@Name,@Comment) 9 set@rtn=110 end try 11 begin catch 12 set@rtn=@@ERROR13 14 --辅助信息15 --select ERROR_LINE() as Line,16 -- ERROR_MESSAGE() as message1,17 -- ERROR_NUMBER() as number,18 -- ERROR_PROCEDURE() as proc1,19 -- ERROR_SEVERITY() as severity,20 -- ERROR_STATE() as state121 end catch
3、存储过程执行
相关代码如下:
1 declare2 @rtnint3 exec sp_Insert_Course ‘114‘,‘语文‘,‘‘,@rtn output 4 print@rtn
执行结果:
正常的情况下,返回值为1,
如果已经存在编号为“114”的数据,就会返回 ERROR_CODE:2627,
其他的异常情况会返回相应的代码
4、说明
如果程序有异常,把异常代码返回,然后再进行相关的处理即可。
SQL Server中的异常处理和别的数据库(如Oracle)的有点差异,但是基本思想差不多, 在最后捕获都可以得到异常。
6、char 、varchar有什么区别?
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择它们的理由。
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。
C#数据库面试知识
标签: