第一、sql中写事物
begin try
begin transaction
insert into shiwu (asd) values ('aasdasda');
commit transaction
end try
begin catch
select ERROR_NUMBER() as errornumber
rollback transaction
end catch
第二、c#中执行事物
SqlParameter[] paras =
new
SqlParameter[] { };
paras
=
list.ToArray();
Baitour.Utility.DBHelper db
=
Baitour.Utility.DBHelper.CreateMapping();
DbTransaction dbTran
=
db.CreateTran();
try
{
//
在这里将插入得到的子订单号返回
object
obj =
db.ExecuteScalar(sql.ToString(), paras, dbTran);
fsId
=
obj.ToString();
//
int index = db.ExecuteNonQuery(sql.ToString(), paras, dbTran);
if
(!
string
.IsNullOrWhiteSpace(fsId))
{
dbTran.Commit();
flag
=
true
;
}
}
catch
(Exception ex)
{
flag
=
false
;
dbTran.Rollback();
//
throw;
}
finally
{
db.CloseConn();
}
dbHelper
using
System;
using
System.Collections.Specialized;
using
System.Configuration;
using
System.Data;
using
System.Data.Common;
using
System.Data.SqlClient;
using
Microsoft.Practices.EnterpriseLibrary.Data;
using
Microsoft.Practices.EnterpriseLibrary.Data.Sql;
/*
* 作 者: zjf
* 创建时间: 2013-1-29 10:20:53
* 说明:
*/
namespace
Baitour.Utility
{
///
<summary>
///
数据库访问类
///
</summary>
public
sealed
class
DBHelper
{
public
static
int
ConnIndex =
0
;
public
static
DBHelper CreateMapping(
string
connStr =
""
)
{
DBHelper db
=
new
DBHelper(connStr);
return
db;
}
///
<summary>
///
增删改的数据库连接字符串
///
</summary>
string
conString =
""
;
///
<summary>
///
查询的数据库连接字符串
///
</summary>
string
queryConString =
""
;
DBHelper(
string
connStr =
""
)
{
if
(
string
.IsNullOrWhiteSpace(connStr))
{
conString
= ConfigurationManager.ConnectionStrings[
"
DBConfig
"
].ToString();
//
第一个链接字符串是ConfigurationManager.ConnectionStrings[0].Name LocalSqlServer不知道是谁,所以要从第二个取
//
如果连接字符串的数量和当前索引+1相同 则从第一个索引开始取
NameValueCollection connStrs =
new
NameValueCollection();
int
j =
0
;
for
(
int
i =
0
; i < ConfigurationManager.ConnectionStrings.Count; i++
)
{
if
(ConfigurationManager.ConnectionStrings[i].Name.StartsWith(
"
QueryDB
"
))
{
connStrs.Add(j.ToString(), ConfigurationManager.ConnectionStrings[i].ToString());
j
++
;
}
}
if
(connStrs.Count >
0
)
{
if
(connStrs.Count ==
ConnIndex)
{
ConnIndex
=
0
;
}
queryConString
=
connStrs[ConnIndex].ToString();
ConnIndex
++
;
}
else
{
queryConString
=
conString;
}
}
else
{
conString
=
connStr;
queryConString
=
connStr;
}
DBMapping
=
new
SqlDatabase(conString);
QueryDBMapping
=
new
SqlDatabase(queryConString);
}
#region
变量or属性
///
<summary>
///
增删改的企业库访问映射对象
///
</summary>
internal
Database DBMapping {
get
;
set
; }
///
<summary>
///
查询的企业库访问映射对象
///
</summary>
internal
Database QueryDBMapping {
get
;
set
; }
///
<summary>
///
增删改的数据库连接
///
</summary>
internal
DbConnection DBConnMapping {
get
;
set
; }
///
<summary>
///
查询的数据库连接
///
</summary>
internal
DbConnection QueryDBConnMapping {
get
;
set
; }
///
<summary>
///
数据库事务
///
</summary>
internal
DbTransaction DBTranMapping {
get
;
set
; }
#endregion
#region
方法
#region
准备方法
///
<summary>
///
创建数据库连接
///
</summary>
void
CreateDB()
{
DBMapping
=
new
SqlDatabase(conString);
QueryDBMapping
=
new
SqlDatabase(queryConString);
}
///
<summary>
///
创建并打开连接
///
</summary>
void
CreateConn()
{
#region
增删改
if
(DBMapping ==
null
)
{
CreateDB();
}
if
(DBConnMapping ==
null
)
{
DBConnMapping
=
DBMapping.CreateConnection();
DBConnMapping.Open();
//
打开连接
}
//
打开存在的连接
if
(DBConnMapping !=
null
&& DBConnMapping.State !=
ConnectionState.Open)
{
DBConnMapping.Open();
//
打开连接
}
#endregion
#region
查询
if
(QueryDBMapping ==
null
)
{
CreateDB();
}
if
(QueryDBConnMapping ==
null
)
{
QueryDBConnMapping
=
QueryDBMapping.CreateConnection();
QueryDBConnMapping.Open();
//
打开连接
}
//
打开存在的连接
if
(QueryDBConnMapping !=
null
&& QueryDBConnMapping.State !=
ConnectionState.Open)
{
QueryDBConnMapping.Open();
//
打开连接
}
#endregion
}
///
<summary>
///
关闭数据库连接
///
</summary>
public
void
CloseConn()
{
if
(DBConnMapping !=
null
&& DBConnMapping.State ==
ConnectionState.Open)
{
DBConnMapping.Close();
DBConnMapping.Dispose();
}
if
(QueryDBConnMapping !=
null
&& QueryDBConnMapping.State ==
ConnectionState.Open)
{
QueryDBConnMapping.Close();
QueryDBConnMapping.Dispose();
}
}
///
<summary>
///
创建并返回事务
///
</summary>
public
DbTransaction CreateTran()
{
if
(DBMapping ==
null
) { CreateDB(); }
CreateConn();
DBTranMapping
= DBTranMapping ??
DBConnMapping.BeginTransaction();
return
DBTranMapping;
}
///
<summary>
///
创建命令对象
///
</summary>
///
<param name="commandType">
sql语句/存储过程
</param>
///
<param name="commandText">
名称
</param>
///
<param name="commParameters">
sql参数
</param>
///
<param name="isQuery">
是否是创建查询命令
</param>
///
<returns></returns>
DbCommand CreateComm(CommandType commandType,
string
commandText, DbParameter[] commParameters =
null
,
bool
isQuery =
false
)
{
DbCommand command
=
null
;
if
(commandText ==
null
|| commandText.Length ==
0
)
throw
new
ArgumentNullException(
"
sql语句/存储过程为空
"
);
//
创建命令对象
if
(commandType ==
CommandType.StoredProcedure)
command
= isQuery ?
QueryDBMapping.GetStoredProcCommand(commandText) : DBMapping.GetStoredProcCommand(commandText);
else
command
= isQuery ?
QueryDBMapping.GetSqlStringCommand(commandText) : DBMapping.GetSqlStringCommand(commandText);
//
清空参数
command.Parameters.Clear();
//
填充参数
if
(commParameters !=
null
)
{
if
(!
string
.IsNullOrWhiteSpace(ConfigurationManager.AppSettings[
"
DBType
"
]) && ConfigurationManager.AppSettings[
"
DBType
"
].ToLower() ==
"
oracle
"
)
{
foreach
(DbParameter item
in
commParameters)
{
if
(!item.ParameterName.StartsWith(
"
!
"
))
item.ParameterName
=
"
!
"
+
item.ParameterName;
}
}
else
{
foreach
(DbParameter item
in
commParameters)
{
if
(!item.ParameterName.StartsWith(
"
@
"
))
item.ParameterName
=
"
@
"
+
item.ParameterName;
}
}
if
(commParameters.Length ==
1
) { command.Parameters.Add(commParameters[
0
]); }
else
{ command.Parameters.AddRange(commParameters); }
}
return
command;
}
#endregion
#region
执行方法
#region
sql、存储过程
///
<summary>
///
返回首列
///
</summary>
///
<param name="sql"></param>
///
<param name="paras"></param>
///
<returns></returns>
public
object
ExecuteScalar(
string
sql, DbParameter[] paras, CommandType cType =
CommandType.Text)
{
object
obj =
null
;
try
{
DbCommand command
= CreateComm(cType, sql, paras,
true
);
obj
=
DBMapping.ExecuteScalar(command);
}
catch
(Exception ex)
{
}
finally
{
CloseConn();
}
return
obj;
}
///
<summary>
///
返回首列
///
</summary>
///
<param name="sql"></param>
///
<param name="paras"></param>
///
<returns></returns>
public
object
ExecuteScalar(
string
sql, DbParameter[] paras, DbTransaction tran, CommandType cType =
CommandType.Text)
{
object
obj =
null
;
try
{
DbCommand command
=
CreateComm(cType, sql, paras);
obj
=
DBMapping.ExecuteScalar(command, tran);
}
catch
(Exception ex)
{
}
finally
{
}
return
obj;
}
///
<summary>
///
返回reader
///
</summary>
///
<param name="sql"></param>
///
<param name="paras"></param>
///
<returns></returns>
public
IDataReader ExecuteReader(
string
sql, DbParameter[] paras, CommandType cType =
CommandType.Text)
{
try
{
DbCommand command
= CreateComm(cType, sql, paras,
true
);
command.Connection
=
QueryDBMapping.CreateConnection();
command.Connection.Open();
return
command.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
(Exception ex)
{
return
null
;
}
}
///
<summary>
///
返回数据集
///
</summary>
///
<returns></returns>
public
DataSet ExecuteDataSet(
string
sql, DbParameter[] paras, CommandType cType =
CommandType.Text)
{
try
{
DbCommand command
= CreateComm(cType, sql, paras,
true
);
return
QueryDBMapping.ExecuteDataSet(command);
}
catch
(Exception ex)
{
return
null
;
}
finally
{
CloseConn();
}
}
public
DataSet ExecuteDataSet(
string
sql)
{
try
{
DbCommand db
=
CreateComm(CommandType.Text, sql);
return
QueryDBMapping.ExecuteDataSet(CommandType.Text,sql);
}
catch
{
return
null
;
}
finally
{
CloseConn();
}
}
///
<summary>
///
得到影响行数
///
</summary>
///
<returns></returns>
public
int
ExecuteNonQuery(
string
sql, DbParameter[] paras, CommandType cType =
CommandType.Text)
{
try
{
DbCommand command
=
CreateComm(cType, sql, paras);
return
DBMapping.ExecuteNonQuery(command);
}
catch
(Exception ex)
{
return
-
1
;
}
finally
{
CloseConn();
}
}
///
<summary>
///
得到影响行数需要手动关闭连接
///
</summary>
///
<returns></returns>
public
int
ExecuteNonQuery(
string
sql, DbParameter[] paras, DbTransaction tran, CommandType cType =
CommandType.Text)
{
try
{
DbCommand command
=
CreateComm(cType, sql, paras);
return
DBMapping.ExecuteNonQuery(command, tran);
}
catch
(Exception ex)
{
return
-
1
;
}
finally
{
}
}
///
<summary>
///
数据库分页获取DataSet对象
///
</summary>
///
<param name="sTable_Name">
表名/视图名
</param>
///
<param name="sSign_Record">
显示的字段(以,分隔)/*表示全部字段
</param>
///
<param name="sFilter_Condition">
查询条件
</param>
///
<param name="iPage_Size">
每页显示条数
</param>
///
<param name="iPage_Index">
第几页
</param>
///
<param name="sTaxisField">
排序字段(以,分隔)
</param>
///
<param name="iTaxis_Sign">
排序0升序1降序
</param>
///
<param name="iPageCount">
返回总页数
</param>
///
<param name="iiRecord_Count">
返回总记录数
</param>
///
<returns>
DataSet对象
</returns>
public
DataSet ExecutePageDataSet(
string
sTable_Name,
string
sSign_Record,
string
sFilter_Condition,
int
iPage_Size,
int
iPage_Index,
string
sTaxisField,
int
iTaxis_Sign,
out
int
iPageCount,
out
int
iiRecord_Count)
{
DataSet ds
=
new
DataSet();
try
{
SqlParameter[] param
=
new
SqlParameter[]
{
new
SqlParameter(
"
@TableName
"
,sTable_Name),
new
SqlParameter(
"
@Fields
"
,sSign_Record),
new
SqlParameter(
"
@OrderField
"
,sTaxisField),
new
SqlParameter(
"
@Taxis_Sign
"
,iTaxis_Sign),
new
SqlParameter(
"
@sqlWhere
"
,sFilter_Condition),
new
SqlParameter(
"
@pageSize
"
,iPage_Size),
new
SqlParameter(
"
@pageIndex
"
,iPage_Index),
new
SqlParameter(
"
@TotalPage
"
, System.Data.SqlDbType.Int),
new
SqlParameter(
"
@totalCount
"
, System.Data.SqlDbType.Int)
};
param[
7
].Direction =
System.Data.ParameterDirection.Output;
param[
8
].Direction =
System.Data.ParameterDirection.Output;
//
执行
DbCommand command = CreateComm(CommandType.StoredProcedure,
"
up_ProcCustomPage2005
"
, param);
ds
=
QueryDBMapping.ExecuteDataSet(command);
iPageCount
=
0
;
iiRecord_Count
=
0
;
try
{
iPageCount
= Convert.ToInt32(command.Parameters[
"
@TotalPage
"
].Value);
iiRecord_Count
= Convert.ToInt32(command.Parameters[
"
@totalCount
"
].Value);
}
catch
(Exception ex)
{
iPageCount
=
0
;
iiRecord_Count
=
0
;
}
finally
{
command.Parameters.Clear();
}
}
catch
(Exception ex)
{
ds
=
null
;
iPageCount
=
0
;
iiRecord_Count
=
0
;
}
finally
{
}
return
ds;
}
#endregion
#region
不加上查询参数的
///
<summary>
///
返回首列
///
</summary>
///
<param name="sql"></param>
///
<param name="paras"></param>
///
<returns></returns>
public
object
ExecuteScalar(
string
sql)
{
object
obj =
null
;
try
{
DbCommand command
= CreateComm(CommandType.Text, sql,
null
,
true
);
return
DBMapping.ExecuteScalar(command);
}
catch
(Exception ex)
{
}
finally
{
CloseConn();
}
return
obj;
}
///
<summary>
///
返回reader
///
</summary>
///
<returns></returns>
public
IDataReader ExecuteReader(
string
sql)
{
try
{
DbCommand command
= CreateComm(CommandType.Text, sql,
null
,
true
);
return
QueryDBMapping.ExecuteReader(command);
}
catch
(Exception ex)
{
return
null
;
}
}
///
<summary>
///
得到影响行数
///
</summary>
///
<returns></returns>
public
int
ExecuteNonQuery(
string
sql)
{
try
{
DbCommand command
= CreateComm(CommandType.Text, sql,
null
,
true
);
return
DBMapping.ExecuteNonQuery(command);
}
catch
(Exception ex)
{
throw
;
}
}
#endregion
#endregion
#endregion
}
}

