数据库设计好了,我们开始设计SQLHelper了,是一个SQL基类.
连接数据源:
private SqlConnection myConnection = null ; |
private readonly string RETURNVALUE = "RETURNVALUE" ; |
打开数据库连接.
private void Open() |
{ |
// 打开数据库连接 |
if (myConnection == null ) |
{ |
// myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); |
myConnection = new SqlConnection(ConfigurationManager.AppSettings[ "ConnectionString" ].ToString()); |
|
} |
if (myConnection.State == ConnectionState.Closed) |
{ |
try |
{ |
///打开数据库连接 |
myConnection.Open(); |
} |
catch (Exception ex) |
{ |
|
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭已经打开的数据库连接 |
} |
} |
} |
关闭数据库连接
public void Close() |
{ |
///判断连接是否已经创建 |
if (myConnection != null ) |
{ |
///判断连接的状态是否打开 |
if (myConnection.State == ConnectionState.Open) |
{ |
myConnection.Close(); |
} |
} |
} |
释放资源
public void Dispose() |
{ |
// 确认连接是否已经关闭 |
if (myConnection != null ) |
{ |
myConnection.Dispose(); |
myConnection = null ; |
} |
} |
执行无参数和返回int型的存储过程
public int RunProc( string procName) |
{ |
SqlCommand cmd = CreateProcCommand(procName, null ); |
try |
{ |
///执行存储过程 |
cmd.ExecuteNonQuery(); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
///返回存储过程的参数值 |
return ( int )cmd.Parameters[RETURNVALUE].Value; |
} |
执行传入参数和返回int型的存储过程
public int RunProc( string procName, SqlParameter[] prams) |
{ |
SqlCommand cmd = CreateProcCommand(procName, prams); |
try |
{ |
///执行存储过程 |
cmd.ExecuteNonQuery(); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
///返回存储过程的参数值 |
return ( int )cmd.Parameters[RETURNVALUE].Value; |
} |
执行存储过程和返回SqlDataReader
public void RunProc( string procName, out SqlDataReader dataReader) |
{ |
///创建Command |
SqlCommand cmd = CreateProcCommand(procName, null ); |
try |
{ |
///读取数据 |
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); |
} |
catch (Exception ex) |
{ |
dataReader = null ; |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
} |
执行传入参数和返回SqlDataReader存储过程
public void RunProc( string procName, SqlParameter[] prams, out SqlDataReader dataReader) |
{ |
///创建Command |
SqlCommand cmd = CreateProcCommand(procName, prams); |
try |
{ |
///读取数据 |
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); |
} |
catch (Exception ex) |
{ |
dataReader = null ; |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
} |
执行无参数存储过程返回DataSet
public void RunProc( string procName, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateProcDataAdapter(procName, null ); |
try |
{ |
///读取数据 |
da.Fill(dataSet); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
执行传入参数的存储过程返回DataSet
public void RunProc( string procName, SqlParameter[] prams, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateProcDataAdapter(procName, prams); |
try |
{ |
///读取数据 |
da.Fill(dataSet); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
执行传入参数和表名的存储过程返回DataSet
public void RunProc( string procName, SqlParameter[] prams, string TableName, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateProcDataAdapter(procName, prams); |
try |
{ |
///读取数据 |
da.Fill(dataSet, TableName); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
执行无参数SQL语句
public int RunSQL( string cmdText) |
{ |
SqlCommand cmd = CreateSQLCommand(cmdText, null ); |
try |
{ |
///执行存储过程 |
cmd.ExecuteNonQuery(); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
///返回存储过程的参数值 |
return ( int )cmd.Parameters[RETURNVALUE].Value; |
} |
执行传入参数SQL语句
public int RunSQL( string cmdText, SqlParameter[] prams) |
{ |
SqlCommand cmd = CreateSQLCommand(cmdText, prams); |
try |
{ |
///执行存储过程 |
cmd.ExecuteNonQuery(); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
///返回存储过程的参数值 |
return ( int )cmd.Parameters[RETURNVALUE].Value; |
} |
执行无参数SQL语句返回SqlDataReader
public void RunSQL( string cmdText, out SqlDataReader dataReader) |
{ |
///创建Command |
SqlCommand cmd = CreateSQLCommand(cmdText, null ); |
try |
{ |
///读取数据 |
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); |
} |
catch (Exception ex) |
{ |
dataReader = null ; |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
} |
执行传入参数SQL语句返回SqlDataReader
public void RunSQL( string cmdText, SqlParameter[] prams, out SqlDataReader dataReader) |
{ |
///创建Command |
SqlCommand cmd = CreateSQLCommand(cmdText, prams); |
try |
{ |
///读取数据 |
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); |
} |
catch (Exception ex) |
{ |
dataReader = null ; |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
} |
执行无参数SQL语句返回DataSet
public void RunSQL( string cmdText, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateSQLDataAdapter(cmdText, null ); |
try |
{ |
///读取数据 |
da.Fill(dataSet); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
执行传入参数SQL语句返回DataSet
public void RunSQL( string cmdText, SqlParameter[] prams, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateProcDataAdapter(cmdText, prams); |
try |
{ |
///读取数据 |
da.Fill(dataSet); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
执行传入参数SQL语句和表名返回DataSet
public void RunSQL( string cmdText, SqlParameter[] prams, string TableName, ref DataSet dataSet) |
{ |
if (dataSet == null ) |
{ |
dataSet = new DataSet(); |
} |
///创建SqlDataAdapter |
SqlDataAdapter da = CreateProcDataAdapter(cmdText, prams); |
try |
{ |
///读取数据 |
da.Fill(dataSet, TableName); |
} |
catch (Exception ex) |
{ |
///记录错误日志 |
SystemError.CreateErrorLog(ex.Message); |
} |
finally |
{ |
///关闭数据库的连接 |
Close(); |
} |
} |
创建一个SqlCommand对象以此来执行存储过程
private SqlCommand CreateProcCommand( string procName, SqlParameter[] prams) |
{ |
///打开数据库连接 |
Open(); |
///设置Command |
SqlCommand cmd = new SqlCommand(procName, myConnection); |
cmd.CommandType = CommandType.StoredProcedure; |
///添加把存储过程的参数 |
if (prams != null ) |
{ |
foreach (SqlParameter parameter in prams) |
{ |
cmd.Parameters.Add(parameter); |
} |
} |
///添加返回参数ReturnValue |
cmd.Parameters.Add( |
new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue, |
false , 0, 0, string .Empty, DataRowVersion.Default, null )); |
///返回创建的SqlCommand对象 |
return cmd; |
} |
创建一个SqlCommand对象以此来执行存储过程
private SqlCommand CreateSQLCommand( string cmdText, SqlParameter[] prams) |
{ |
///打开数据库连接 |
Open(); |
///设置Command |
SqlCommand cmd = new SqlCommand(cmdText, myConnection); |
///添加把存储过程的参数 |
if (prams != null ) |
{ |
foreach (SqlParameter parameter in prams) |
{ |
cmd.Parameters.Add(parameter); |
} |
} |
///添加返回参数ReturnValue |
cmd.Parameters.Add( |
new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue, |
false , 0, 0, string .Empty, DataRowVersion.Default, null )); |
///返回创建的SqlCommand对象 |
return cmd; |
} |
创建一个SqlDataAdapter对象,用此来执行存储过程
private SqlDataAdapter CreateProcDataAdapter( string procName, SqlParameter[] prams) |
{ |
///打开数据库连接 |
Open(); |
///设置SqlDataAdapter对象 |
SqlDataAdapter da = new SqlDataAdapter(procName, myConnection); |
da.SelectCommand.CommandType = CommandType.StoredProcedure; |
///添加把存储过程的参数 |
if (prams != null ) |
{ |
foreach (SqlParameter parameter in prams) |
{ |
da.SelectCommand.Parameters.Add(parameter); |
} |
} |
///添加返回参数ReturnValue |
da.SelectCommand.Parameters.Add( |
new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue, |
false , 0, 0, string .Empty, DataRowVersion.Default, null )); |
///返回创建的SqlDataAdapter对象 |
return da; |
} |
创建一个SqlDataAdapter对象,用此来执行SQL语句
private SqlDataAdapter CreateSQLDataAdapter( string cmdText, SqlParameter[] prams) |
{ |
///打开数据库连接 |
Open(); |
///设置SqlDataAdapter对象 |
SqlDataAdapter da = new SqlDataAdapter(cmdText, myConnection); |
///添加把存储过程的参数 |
if (prams != null ) |
{ |
foreach (SqlParameter parameter in prams) |
{ |
da.SelectCommand.Parameters.Add(parameter); |
} |
} |
///添加返回参数ReturnValue |
da.SelectCommand.Parameters.Add( |
new SqlParameter(RETURNVALUE, SqlDbType.Int, 4, ParameterDirection.ReturnValue, |
false , 0, 0, string .Empty, DataRowVersion.Default, null )); |
///返回创建的SqlDataAdapter对象 |
return da; |
} |
生成存储过程参数
public SqlParameter CreateParam( string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) |
{ |
SqlParameter param; |
///当参数大小为0时,不使用该参数大小值 |
if (Size > 0) |
{ |
param = new SqlParameter(ParamName, DbType, Size); |
} |
else |
{ |
///当参数大小为0时,不使用该参数大小值 |
param = new SqlParameter(ParamName, DbType); |
} |
///创建输出类型的参数 |
param.Direction = Direction; |
if (!(Direction == ParameterDirection.Output && Value == null )) |
{ |
param.Value = Value; |
} |
///返回创建的参数 |
return param; |
} |
传入输入参数
public SqlParameter CreateInParam( string ParamName, SqlDbType DbType, int Size, object Value) |
{ |
return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value); |
} |
传入返回值参数
public SqlParameter CreateOutParam( string ParamName, SqlDbType DbType, int Size) |
{ |
return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null ); |
} |
传入返回值参数
public SqlParameter CreateReturnParam( string ParamName, SqlDbType DbType, int Size) |
{ |
return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null ); |
} |
把所有这些方法放在SQLHelper.cs类里.再建一个SQLTools.cs,里面的方法如下:
public class SystemException : Exception |
{ |
/// <summary> |
/// 包含系统Excepton |
/// </summary> |
public SystemException( string source, string message, Exception inner) |
: base (message, inner) |
{ |
base .Source = source; |
} |
/// <summary> |
/// 不包含系统Excepton |
/// </summary> |
public SystemException( string source, string message) |
: base (message) |
{ |
base .Source = source; |
} |
} |
/// <summary> |
/// 处理网页中的HTML代码,并消除危险字符 |
/// </summary> |
public class SystemHTML |
{ |
private static string HTMLEncode( string fString) |
{ |
if (fString != string .Empty) |
{ |
///替换尖括号 |
fString.Replace( "<" , "<" ); |
fString.Replace( ">" , "&rt;" ); |
///替换引号 |
fString.Replace((( char )34).ToString(), "" "); |
fString.Replace((( char )39).ToString(), "'" ); |
///替换空格 |
fString.Replace((( char )13).ToString(), "" ); |
///替换换行符 |
fString.Replace((( char )10).ToString(), "<BR> " ); |
} |
return (fString); |
} |
} |
/// <summary> |
/// SystemTools 的摘要说明。 |
/// </summary> |
public class SystemTools |
{ |
/// <summary> |
/// 将DataReader转为DataTable |
/// </summary> |
/// <param name="DataReader">DataReader</param> |
public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader) |
{ |
///定义DataTable |
DataTable datatable = new DataTable(); |
try |
{ ///动态添加表的数据列 |
for ( int i = 0; i < dataReader.FieldCount; i++) |
{ |
DataColumn myDataColumn = new DataColumn(); |
myDataColumn.DataType = dataReader.GetFieldType(i); |
myDataColumn.ColumnName = dataReader.GetName(i); |
datatable.Columns.Add(myDataColumn); |
} |
///添加表的数据 |
while (dataReader.Read()) |
{ |
DataRow myDataRow = datatable.NewRow(); |
for ( int i = 0; i < dataReader.FieldCount; i++) |
{ |
myDataRow[i] = dataReader[i].ToString(); |
} |
datatable.Rows.Add(myDataRow); |
myDataRow = null ; |
} |
///关闭数据读取器 |
dataReader.Close(); |
return datatable; |
} |
catch (Exception ex) |
{ |
///抛出类型转换错误 |
SystemError.CreateErrorLog(ex.Message); |
throw new Exception(ex.Message, ex); |
} |
} |
} |
主要是处理异常和一些特殊字符.
再建一个SystemError.cs,里面的方法如下:
public class SystemError |
{ |
private static string m_fileName = "c:\\Systemlog.txt" ; |
public static String FileName |
{ |
get |
{ |
return (m_fileName); |
} |
set |
{ |
if (value != null || value != "" ) |
{ |
m_fileName = value; |
} |
} |
} |
public static void CreateErrorLog( string message) |
{ |
if (File.Exists(m_fileName)) |
{ |
///如果日志文件已经存在,则直接写入日志文件 |
StreamWriter sr = File.AppendText(FileName); |
sr.WriteLine( "\n" ); |
sr.WriteLine(DateTime.Now.ToString() + message); |
sr.Close(); |
} |
else |
{ |
///创建日志文件 |
StreamWriter sr = File.CreateText(FileName); |
sr.Close(); |
} |
} |
} |
主要记录日志.
http://www.cnblogs.com/springyangwc/archive/2011/03/23/1993061.html