心情好,散代码,散分
Ivony 2005-11-23 03:19:19 刚刚把我的数据库操作帮助器在2.0下重构了一下,发出来给大家看看。
注意,up,顶,mark的最多只会给3分,请多多提出批评意见建议。
using System;
using System.Data;
using System.Data.SqlClinet;
using System.Text.RegularExpressions;
//注意,我并没有收集所有的using放在这里
public abstract class DbUtility : IDbUtility
{
#region 抽象方法
protected abstract IDbCommand CreateCommand( bool newConnection );
protected abstract IDataAdapter CreateDataAdapter( IDbCommand selectCommand );
protected abstract IDataParameter CreateParameter( string name, object value );
#endregion
/// <summary>
/// 将查询结果作为表返回
/// </summary>
/// <param name="commandText">查询字符串模板</param>
/// <param name="parameters">查询字符串参数</param>
/// <returns></returns>
public virtual DataTable ExecuteData( string commandText, params object[] parameters )
{
return ExecuteData( null, null, commandText, parameters );
}
/// <summary>
/// 将查询结果作为表返回
/// </summary>
/// <param name="dataSet">需要被填充的数据集</param>
/// <param name="tableName">填充的表名</param>
/// <param name="commandText">查询字符串模板</param>
/// <param name="parameters">查询字符串参数</param>
/// <returns></returns>
public virtual DataTable ExecuteData( DataSet dataSet, string tableName, string commandText, params object[] parameters )
{
IDataAdapter adapter = CreateDataAdapter( CreateCommand( commandText, parameters ) );
if (dataSet == null)
dataSet = new DataSet();
adapter.Fill( dataSet );
DataTable dataTable = dataSet.Tables[dataSet.Tables.Count - 1];
if (tableName != null)
dataTable.TableName = tableName;
return dataTable;
}
/// <summary>
/// 执行无结果的查询
/// </summary>
/// <param name="commandText">查询字符串模板</param>
/// <param name="parameters">查询字符串参数</param>
/// <returns></returns>
public virtual int ExecuteNonQuery( string commandText, params object[] parameters )
{
return ExecuteNonQuery( CreateCommand( commandText, parameters ) );
}
/// <summary>
/// 执行查询,并返回首行首列
/// </summary>
/// <param name="commandText">查询字符串模板</param>
/// <param name="parameters">查询字符串参数</param>
/// <returns></returns>
public virtual object ExecuteScalar( string commandText, params object[] parameters )
{
return ExecuteScalar( CreateCommand( commandText, parameters ) );
}
/// <summary>
/// 执行查询,并返回首行
/// </summary>
/// <param name="commandText">查询字符串模板</param>
/// <param name="parameters">查询字符串参数</param>
/// <returns></returns>
public virtual DataRow ExecuteSingleRow( string commandText, params object[] parameters )
{
throw new NotImplementedException();
}
/// <summary>
/// 执行无结果的查询
/// </summary>
/// <param name="command">查询命令</param>
/// <returns></returns>
public static int ExecuteNonQuery( IDbCommand command )
{
if (command.Connection.State == ConnectionState.Closed)
{
try
{
command.Connection.Open();
return command.ExecuteNonQuery();
}
finally
{
command.Connection.Close();
}
}
else
return command.ExecuteNonQuery();
}
/// <summary>
/// 执行查询,并返回首行首列
/// </summary>
/// <param name="command">查询命令</param>
/// <returns></returns>
public static object ExecuteScalar( IDbCommand command )
{
if (command.Connection.State == ConnectionState.Closed)
{
try
{
command.Connection.Open();
return command.ExecuteScalar();
}
finally
{
command.Connection.Close();
}
}
else
return command.ExecuteNonQuery();
}
public static IDataReader ExecuteReader( IDbCommand command )
{
if (command.Connection.State == ConnectionState.Closed)
{
command.Connection.Open();
return command.ExecuteReader( CommandBehavior.CloseConnection );
}
else
return command.ExecuteReader();
}
protected virtual IDbCommand CreateCommand( string commandText, params object[] parameters )
{
IDbCommand command = CreateCommand( true );
new CommandTextProcesser().ProcessCommandText( ref commandText, ref parameters );
command.CommandText = commandText;
for (int i = 0; i < parameters.Length; i++)
{
command.Parameters.Add( CreateParameter( "Param" + i, parameters[i] ) );
}
return command;
}
}