首页 • 未分类• 【Vegas改编】经典类库:DBAccess()
/**/ /* *****************************************************************************\
* 类名 : DBAccess
* 功能 :
* 对数据库进行操作的一些常用方法
* 原作者: Peter ZD Zhang
* Date : 2006/09/25
* 修改者: Vegas Lee
* Last UpDate : 2008/03/31
\**************************************************************************** */
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;
/**/ /// <summary>
/**/ /* ********************* 2006 9 12 Peter **************************\
* 对数据库进行操作的一些常用方法
\**************************************************************** */
/**/ /// </summary>
public class DBAccess
{
private string connStr; // 数据库的连接字符串
/**/ /* ***********************************************\
*DBAccess的构造函数 有两个重载
* DBAccess()
* DBAccess(string connStr)
*DBAccess()默认获取的连接数据库字符串为WebConfig->AppSettings节设置的key=ConnectionString的value
*参数:
* connStr:连接数据库的字符串
* 2006 09 19 Peter
*
* 更改DBAccess()默认获取的连接数据库字符串为WebConfig->connectionStrings节设置的name的connectionString
* 2008/03/31
*
\*********************************************** */
public DBAccess()
{
// connStr= System.Configuration.ConfigurationSettings.GetConfig("connectionStrings").ToString();
connStr = System.Configuration.ConfigurationManager.ConnectionStrings[ " LocalSqlServer " ].ConnectionString;
// connStr="Server=sc00-test-001;uid=sa;pwd=123456;database=BIS";
}
public DBAccess( string connStr)
{
connStr = connStr;
}
// 属性
public string ConnectionString // 设置或者获取数据库的连接字符串的属性
{
get
{
return connStr;
}
set
{
connStr = value;
}
}
// 公有函数
检视DataSet做的变更,自动更新到数据库 #region 检视DataSet做的变更,自动更新到数据库
public DataSet UpdateDataSet( string mySelectQuery, string myTableName)
{
SqlConnection myConn = new SqlConnection(connStr);
SqlDataAdapter myDataAdapter = new SqlDataAdapter();
myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn);
SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter);
myConn.Open();
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName);
// code to modify data in DataSet here
// Without the SqlCommandBuilder this line would fail
myDataAdapter.Update(ds, myTableName);
myConn.Close();
return ds;
}
#endregion
public int GetMaxID( string sqlno)
{
// 产生文件编号~~~~ Vegas Added
DataSet dsNo = new DataSet();
dsNo = GetDataSet(sqlno);
int tempno = 1 ;
if (dsNo.Tables[ 0 ].Rows.Count == 0 )
{
tempno = 1 ;
}
else
{
tempno = int .Parse(dsNo.Tables[ 0 ].Rows[ 0 ][ 0 ].ToString()) + 1 ;
}
return tempno;
}
public string GetParentID( string sqlno)
{
// 产生文件编号~~~~
DataSet dsNo = new DataSet();
dsNo = GetDataSet(sqlno);
string itemno = "" ;
if (dsNo.Tables[ 0 ].Rows.Count == 0 )
{
itemno = " PN0000000001 " ;
}
else
{
itemno = dsNo.Tables[ 0 ].Rows[ 0 ][ 0 ].ToString();
int tempno = int .Parse(itemno.Substring( 2 , 10 ));
tempno = tempno + 1 ;
itemno = tempno.ToString();
while (itemno.Length != 10 )
{
itemno = " 0 " + itemno;
}
itemno = " PN " + itemno;
}
return itemno;
}
GetDataReader VegasAdd 08-03-06 #region GetDataReader VegasAdd 08-03-06
public SqlDataReader GetDataReader( string sql)
{
SqlConnection conn = new SqlConnection(connStr);
SqlCommand scm = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader dr = scm.ExecuteReader();
return dr;
}
#endregion
GetDataSet #region GetDataSet
public DataSet GetDataSet( string sql, string connStr)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 通过传进的其他connectionString的sql语句填充记录集
*参数:
* sql :select语句
*返回:
* failed: return null
* success:return DataSet Object
* Vegas 2008-3-21
\******************************************* */
#endregion
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
public DataSet GetDataSet( string sql)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 通过传进的sql语句填充记录集
*参数:
* sql :select语句
*返回:
* failed: return null
* success:return DataSet Object
* Peter 2006 09 19
\******************************************* */
#endregion
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
public DataSet GetDataSet( string procName, System.Data.IDataParameter[] paramers)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 执行存储过程,返回DataSet
*参数:
* sql:Proc Name
* paramers:参数数组
*返回: DataSet
Peter 2006 10 10
\******************************************* */
#endregion
SqlDataAdapter sda = new SqlDataAdapter(procName, connStr);
sda.SelectCommand.CommandType = CommandType.StoredProcedure;
foreach (System.Data.IDataParameter paramer in paramers)
{
sda.SelectCommand.Parameters.Add(paramer);
}
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
GetDataTable #region GetDataTable
public DataTable GetDataTable( string sql)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 通过传进的sql语句填充一个DataTable
*参数:
* sql :select语句
*返回:
* return DataTable Object
* Peter 2006 09 19
\******************************************* */
#endregion
SqlDataAdapter sda = new SqlDataAdapter(sql, connStr);
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
#endregion
ExecCommand #region ExecCommand
public int ExecCommand(SqlCommand sqlcom)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 通过传进的sqlcommand对像执行该sqlcommand
*参数:
* sqlcom:sqlcommand对像
*返回:
* return int(sqlcommand对像执行影响的行数)
* Peter 2006 09 20
\******************************************* */
#endregion
SqlConnection conn = new SqlConnection(connStr);
sqlcom.Connection = conn;
conn.Open();
try
{
int rtn = sqlcom.ExecuteNonQuery();
return rtn;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
public int ExecCommand( string sql)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 执行该sql语句,插入,删除等语句
*参数:
* sql:sql语句
*返回:
* return int(sql语句执行时影响的行数)
* Peter 2006 09 20
\******************************************* */
#endregion
if (sql.EndsWith( " , " )) sql = sql.Substring( 0 , sql.Length - 1 );
SqlCommand sqlcom = new SqlCommand(sql);
return ExecCommand(sqlcom);
}
#endregion
ExecuteScalar #region ExecuteScalar
public object ExecuteScalar( string sql)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 执行sql语句,并获取该sql语句的查询到的第一行数据
*参数:
* sql:sql select语句
*返回:
* return object(在调用该函数时需要把返回值进行强制类型转换)
* Peter 2006 09 20
\******************************************* */
#endregion
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sqlcom = new SqlCommand(sql, conn);
conn.Open();
try
{
object rtn = sqlcom.ExecuteScalar();
return rtn;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
#endregion
ExecSPCommand #region ExecSPCommand
public void ExecSPCommand( string procName, System.Data.IDataParameter[] paramers)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 执行带参数的sql语句,也可以是存储过程
主要是insert update delete 语句
*参数:
* sql:带参数的sql语句
* paramers:参数数组
*返回: 无
* Peter 2006 09 20
\******************************************* */
#endregion
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sqlcom = new SqlCommand(procName, conn);
sqlcom.CommandType = CommandType.StoredProcedure;
foreach (System.Data.IDataParameter paramer in paramers)
{
sqlcom.Parameters.Add(paramer);
}
conn.Open();
try
{
sqlcom.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
#endregion
ExecSPDataSet #region ExecSPDataSet
public DataSet ExecSPDataSet( string sql, System.Data.IDataParameter[] paramers)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 执行带参数的sql语句,主要是select 语句
*参数:
* sql:带参数的sql select语句
* paramers:参数数组
*返回:
* return DataSet Object
* Peter 2006 09 20
\******************************************* */
#endregion
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sqlcom = new SqlCommand(sql, conn);
sqlcom.CommandType = CommandType.StoredProcedure;
foreach (System.Data.IDataParameter paramer in paramers)
{
sqlcom.Parameters.Add(paramer);
}
conn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlcom;
DataSet ds = new DataSet();
try
{
da.Fill(ds);
return ds;
}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}
}
#endregion
UpdateTable #region UpdateTable
public void UpdateTable(DataTable dt, string TableName, string KeyName)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 更新一个表
*参数:
* dt:要更新的表在内存中存放的DataTable对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
foreach (DataRow dr in dt.Rows)
{
updateRow(dr, TableName, KeyName);
}
}
#endregion
InsertTable #region InsertTable
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 插入DataTable对象的所有记录到数据库中,有三个重载
*参数:
* dt:要更新的表在内存中存放的DataTable对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
// 用於主键是数据库表名+ID类型的
public void InsertTable(DataTable dt)
{
string TableName = " [ " + dt.TableName + " ] " ;
string KeyName = dt.TableName + " ID " ;
foreach (DataRow dr in dt.Rows)
{
insertRow(dr, TableName, KeyName);
}
}
// 用於主键是任意类型的
public void InsertTable(DataTable dt, string KeyName)
{
string TableName = " [ " + dt.TableName + " ] " ;
foreach (DataRow dr in dt.Rows)
{
insertRow(dr, TableName, KeyName);
}
}
// 指定表名且用於主键是任意类型的
public void InsertTable(DataTable dt, string TableName, string KeyName)
{
foreach (DataRow dr in dt.Rows)
{
insertRow(dr, TableName, KeyName);
}
}
#endregion
DeleteTable #region DeleteTable
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 在数据库删除DataTable对象的所有记录,有二个重载
*参数:
* dt:要更新的表在内存中存放的DataTable对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
// 用於默认表名的
public void DeleteTable(DataTable dt, string KeyName)
{
string TableName = " [ " + dt.TableName + " ] " ;
foreach (DataRow dr in dt.Rows)
{
deleteRow(dr, TableName, KeyName);
}
}
// 用於指定表名的
public void DeleteTable(DataTable dt, string TableName, string KeyName)
{
foreach (DataRow dr in dt.Rows)
{
deleteRow(dr, TableName, KeyName);
}
}
#endregion
GetSqlCount #region GetSqlCount
// Function Name: GetSqlCount()
// Function Description: Return the Count of the recored in a certern condition //
// Return Value Type: int
// Parameters List: string sql(e.g "select count(*) from TableName where Condition1 ..etc"
// Author: Hunk Hu
// Create Date: 2006/10/01
public static int GetSqlCount( string sql)
{
int Cnt = 0 ;
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings[ " ConnectionString " ];
SqlConnection Con = new SqlConnection(ConnectionString);
try
{
Con.Open();
SqlCommand Cmd = new SqlCommand(sql, Con);
Cnt = (Int32)Cmd.ExecuteScalar();
Con.Close();
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
finally
{
if (Con != null )
Con.Close();
}
return Cnt;
}
#endregion
ExecuteTransaction #region ExecuteTransaction
// Function Name: ExecuteTransaction()
// Function Description: Execute a set of sql transaction which must be successfully run,if any failed roll back the transaction
// Return Value Type: bool (if all sql execute without any exception returns True,else return False)
// Parameters List: string Array strSqlList[] which contains your SQL Transaction(such as insert into ;update etc);
// Author: Hunk Hu
// Create Date: 2006/10/01
public bool ExecuteTransaction( string [] strSqlList)
{
SqlConnection Con = new SqlConnection(connStr);
SqlCommand Cmd = new SqlCommand();
SqlTransaction sqlTrans;
Cmd.Connection = Con;
Con.Open();
sqlTrans = Con.BeginTransaction(IsolationLevel.ReadCommitted);
Cmd.Transaction = sqlTrans;
bool rtnVal = false ;
try
{
for ( int i = 0 ; i < strSqlList.Length; i ++ )
{
string sqlstr = strSqlList[i];
Cmd.CommandText = sqlstr;
Cmd.ExecuteNonQuery();
}
sqlTrans.Commit();
Con.Close();
rtnVal = true ;
}
catch (Exception e)
{
sqlTrans.Rollback();
throw new Exception(e.Message.ToString());
}
finally
{
if (Con != null )
Con.Close();
}
return rtnVal;
}
#endregion
ExecuteNonQuery #region ExecuteNonQuery
// Function Name: ExecuteNonQuery(string sql)
// Function Description: Execute a Command (that returns no resultset and takes no parameters) against the database
// Return Value Type: The number of rows affected
// Parameters List: string sql (such as update ,insert , delete etc)
// Author: Hunk Hu
// Create Date: 2006/10/11
public int ExecuteNonQuery( string sql)
{
注释 #region 注释
#endregion
SqlConnection conn = new SqlConnection(connStr);
SqlCommand sqlcom = new SqlCommand(sql, conn);
conn.Open();
try
{
int rtn = sqlcom.ExecuteNonQuery();
return rtn;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null )
conn.Close();
}
}
#endregion
GetSqlFirstItem #region GetSqlFirstItem
public string GetSqlFirstItem( string sql)
{
string eItem = "" ;
SqlConnection Conn = new SqlConnection(connStr);
SqlCommand Cmd = new SqlCommand(sql, Conn);
Conn.Open();
try
{
eItem = Cmd.ExecuteScalar().ToString();
return eItem;
}
catch (Exception e)
{
throw new Exception(e.Message.ToString());
}
finally
{
if (Conn != null )
Conn.Close();
}
}
#endregion
BindDataToDrpList #region BindDataToDrpList
public static void BindDataToDrpList(System.Web.UI.WebControls.DropDownList drp, System.Data.DataTable dt, string fieldStr, string valuefieldStr)
{
/**/ /* **********************************************************\
//功能参数:
// 绑定数据到DropDownList控件
//
//参数:
// drp:System.Web.UI.WebControls.DropDownList
// dt: System.Data.DataTable
// fieldStr:DataTable的字段名,作为DropDownList的Text
valuefieldStr:DataTable的字段名,作为DropDownList的value
//返回:无
// by peter 2006 09 25
\********************************************************** */
if (dt.Rows.Count != 0 )
{
for ( int i = 0 ; i < dt.Rows.Count; i ++ )
{
drp.Items.Add( new System.Web.UI.WebControls.ListItem(dt.Rows[i][fieldStr].ToString(), dt.Rows[i][valuefieldStr].ToString()));
}
}
}
#endregion
// 私有函数
IsNumeric #region IsNumeric
// Function Name: IsNumeric(string number)
// Function Description: 判断number是否为数字类型
// Return Value Type: bool
// Parameters List: string
// Author: angela
// Create Date: 2006/10/11
public bool IsNumeric( string number)
{
try
{
int k = 0 ;
for ( int i = 0 ; i < number.Length; i ++ )
{
if ( ! char .IsNumber(number, i))
{
if (number.Substring(i, 1 ) != " . " || k >= 2 )
{ return false ; }
else
{ k = k + 1 ; }
}
}
return true ;
}
catch
{
return false ;
}
}
#endregion
DbType #region DbType
private System.Data.DbType GetDbType(Type type)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 返回Type类型的名称
*参数:
* type:Type对像
*返回:System.Data.DbType
* Peter 2006 09 20
\******************************************* */
#endregion
DbType result = DbType.String;
if (type.Equals( typeof ( int )) || type.IsEnum)
result = DbType.Int32;
else if (type.Equals( typeof ( long )))
result = DbType.Int32;
else if (type.Equals( typeof ( double )) || type.Equals( typeof (Double)))
result = DbType.Decimal;
else if (type.Equals( typeof (DateTime)))
result = DbType.DateTime;
else if (type.Equals( typeof ( bool )))
result = DbType.Boolean;
else if (type.Equals( typeof ( string )))
result = DbType.String;
else if (type.Equals( typeof ( decimal )))
result = DbType.Decimal;
else if (type.Equals( typeof ( byte [])))
result = DbType.Binary;
else if (type.Equals( typeof (Guid)))
result = DbType.Guid;
return result;
}
#endregion
updateRow #region updateRow
private void updateRow(DataRow dr, string TableName, string KeyName)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 更新一个表中的一行,私有函数
*参数:
* dr:要向数据库中更新的DataRow对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
if (dr[KeyName] == DBNull.Value)
{
throw new Exception(KeyName + " 的值不能为空 " );
}
if (dr.RowState == DataRowState.Deleted)
{
deleteRow(dr, TableName, KeyName);
}
else if (dr.RowState == DataRowState.Modified)
{
midifyRow(dr, TableName, KeyName);
}
else if (dr.RowState == DataRowState.Added)
{
insertRow(dr, TableName, KeyName);
}
else if (dr.RowState == DataRowState.Unchanged)
{
midifyRow(dr, TableName, KeyName);
}
}
#endregion
deleteRow #region deleteRow
private void deleteRow(DataRow dr, string TableName, string KeyName)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 在数据库中删除该DataRow表示的记录,私有函数
*参数:
* dr:标识要在数据库中删除哪一行的DataRow对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
string sql = " Delete {0} where {1} =@{1} " ;
DataTable dtb = dr.Table;
sql = string .Format(sql, TableName, KeyName);
SqlCommand sqlcom = new SqlCommand(sql);
System.Data.IDataParameter iparam = new SqlParameter();
iparam.ParameterName = " @ " + KeyName;
iparam.DbType = GetDbType(dtb.Columns[KeyName].DataType);
iparam.Value = dr[KeyName];
sqlcom.Parameters.Add(iparam);
ExecCommand(sqlcom);
}
#endregion
midifyRow #region midifyRow
private void midifyRow(DataRow dr, string TableName, string KeyName)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 在数据库中修改该DataRow标识的记录,私有函数
*参数:
* dr:标识要在数据库中修改哪一行的DataRow对像
* TableName:要更新的表的名字
* KeyName:要更新的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
string UpdateSql = " Update {0} set {1} {2} " ;
string setSql = " {0}= @{0} " ;
string wherSql = " Where {0}=@{0} " ;
StringBuilder setSb = new StringBuilder();
SqlCommand sqlcom = new SqlCommand();
DataTable dtb = dr.Table;
for ( int k = 0 ; k < dr.Table.Columns.Count; ++ k)
{
System.Data.IDataParameter iparam = new SqlParameter();
iparam.ParameterName = " @ " + dtb.Columns[k].ColumnName;
iparam.DbType = GetDbType(dtb.Columns[k].DataType);
iparam.Value = dr[k];
sqlcom.Parameters.Add(iparam);
if (dtb.Columns[k].ColumnName == KeyName)
{
wherSql = string .Format(wherSql, KeyName);
}
else
{
setSb.Append( string .Format(setSql, dtb.Columns[k].ColumnName));
setSb.Append( " , " );
}
}
string setStr = setSb.ToString();
setStr = setStr.Substring( 0 , setStr.Length - 1 ); // trim ,
string sql = string .Format(UpdateSql, TableName, setStr, wherSql);
sqlcom.CommandText = sql;
ExecCommand(sqlcom);
}
#endregion
insertRow #region insertRow
private void insertRow(DataRow dr, string TableName, string KeyName)
{
注释 #region 注释
/**/ /* ********************************************\
*功能:
* 在数据库中插入该DataRow,私有函数
*参数:
* dr:要在数据库中插入的DataRow对像
* TableName:要插入记录的表的名字
* KeyName:要插入记录的表的主键名称
*返回:无
* Peter 2006 09 20
\******************************************* */
#endregion
string InsertSql = " Insert into {0}({1}) values({2}) " ;
SqlCommand sqlcom = new SqlCommand();
DataTable dtb = dr.Table;
StringBuilder insertValues = new StringBuilder();
StringBuilder cloumn_list = new StringBuilder();
for ( int k = 0 ; k < dr.Table.Columns.Count; ++ k)
{
// just for genentae,
if (dtb.Columns[k].ColumnName == KeyName) continue ;
System.Data.IDataParameter iparam = new SqlParameter();
iparam.ParameterName = " @ " + dtb.Columns[k].ColumnName;
iparam.DbType = GetDbType(dtb.Columns[k].DataType);
iparam.Value = dr[k];
sqlcom.Parameters.Add(iparam);
cloumn_list.Append(dtb.Columns[k].ColumnName);
insertValues.Append( " @ " + dtb.Columns[k].ColumnName);
cloumn_list.Append( " , " );
insertValues.Append( " , " );
}
string cols = cloumn_list.ToString();
cols = cols.Substring( 0 , cols.Length - 1 );
string values = insertValues.ToString();
values = values.Substring( 0 , values.Length - 1 );
string sql = string .Format(InsertSql, TableName, cols, values);
sqlcom.CommandText = sql;
ExecCommand(sqlcom);
}
#endregion
}
相关文章