最近在做一些EO方面的系统开发,由于涉及到对数据库的操作量比较大,用ADO.NET和数据库进行连接交互的时候,难免会对程序的性能产生影响。比如说我们现在要对九个SQL语句进行数据库操作,并且每个语句的执行是有顺序限制的,如果我们一次一个一个的与数据库进行交互,则需要和数据库建立九次连接,这样对系统性能的损耗太大,那么该如何实现呢。如下:
1、将要执行的九条SQL语句依次推入List集合中:
List<string> sQLStringList = new List<string>();
sQLStringList.Add("select * from table1");
sQLStringList.Add("select * from table2");
sQLStringList.Add("select * from table3");
sQLStringList.Add("select * from table4");
sQLStringList.Add("select * from table5");
sQLStringList.Add("delete from table1");
sQLStringList.Add("delete from table2");
sQLStringList.Add("delete from table3");
sQLStringList.Add("delete from table4");
2、利用事物实现与数据库只建立一次连接,并且实现了如果都成功了一起提交,哪怕有一条SQL执行出错了,都不会提交(要么都提交,要么都失败)。如下:
public static bool ExecuteSqlTran(List<string> SQLStringList)
{
bool flag;
try
{
using (SqlConnection connection = new SqlConnection(strConnection))
{
connection.Open();
SqlCommand command = new SqlCommand
{
Connection = connection
};
SqlTransaction transaction = connection.BeginTransaction();
command.Transaction = transaction;
try
{
for (int i = 0; i < SQLStringList.Count; i++)
{
string str = SQLStringList[i].ToString();
if (str.Trim().Length > 1)
{
command.CommandText = str;
command.ExecuteNonQuery();
}
}
transaction.Commit();
flag = true;
}
catch (SqlException)
{
transaction.Rollback();
flag = false;
}
}
}
catch (Exception)
{
flag = false;
}
return flag;
}