using System; using System.Collections; using System.Collections.Specialized; using System.Runtime.Remoting.Messaging; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace LTP.SQLServerDAL { /// <summary> /// ADO.NET數據庫操做基礎類。 /// </summary> public abstract class DbManagerSQL { //數據庫鏈接字符串 protected static string connectionString = ConfigurationSettings.AppSettings["ConnectionString"]; public DbManagerSQL() { // // TODO: 在此處添加構造函數邏輯 // } /// <summary> /// 執行SQL語句,返回影響的記錄數 /// </summary> /// <param name="SQLString"></param> /// <returns></returns> public static int ExecuteSql(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(SQLString,connection)) { try { connection.Open(); int rows=cmd.ExecuteNonQuery(); return rows; } catch(System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } } } } /// <summary> /// 執行兩條SQL語句,實現數據庫事務。 /// </summary> /// <param name="SQLString1"></param> /// <param name="SQLString2"></param> public static void ExecuteSqlTran(string SQLString1,string SQLString2) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection=connection; SqlTransaction tx=connection.BeginTransaction(); cmd.Transaction=tx; try { cmd.CommandText=SQLString1; cmd.ExecuteNonQuery(); cmd.CommandText=SQLString2; cmd.ExecuteNonQuery(); tx.Commit(); } catch(System.Data.SqlClient.SqlException E) { tx.Rollback(); throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行多條SQL語句,實現數據庫事務,每條語句以「;」分割。 /// </summary> /// <param name="SQLStringList"></param> public static void ExecuteSqlTran(string SQLStringList) { using (OdbcConnection conn = new OdbcConnection(connectionString)) { conn.Open(); OdbcCommand cmd = new OdbcCommand(); cmd.Connection=conn; OdbcTransaction tx=conn.BeginTransaction(); cmd.Transaction=tx; try { string [] split= SQLStringList.Split(new Char [] { ';'}); foreach (string strsql in split) { if (strsql.Trim()!="") { cmd.CommandText=strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch(System.Data.Odbc.OdbcException E) { tx.Rollback(); throw new Exception(E.Message); } } } /// <summary> /// 執行帶一個存儲過程參數的的SQL語句。 /// </summary> /// <param name="SQLString"></param> /// <param name="content"></param> /// <returns></returns> public static int ExecuteSql(string SQLString,string content) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(SQLString,connection); System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter ( "@content", SqlDbType.NText); myParameter.Value = content ; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows=cmd.ExecuteNonQuery(); return rows; } catch(System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 向數據庫裏插入圖像格式的字段 /// </summary> /// <param name="strSQL"></param> /// <param name="fs"></param> /// <returns></returns> public static int ExecuteSqlInsertImg(string strSQL,byte[] fs) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(strSQL,connection); System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter ( "@fs", SqlDbType.Image); myParameter.Value = fs ; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows=cmd.ExecuteNonQuery(); return rows; } catch(System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行一條計算查詢結果語句,返回查詢結果(整數)。 /// </summary> /// <param name="strSQL"></param> /// <returns></returns> public static int GetCount(string strSQL) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(strSQL,connection); try { connection.Open(); SqlDataReader result = cmd.ExecuteReader(); int i=0; while(result.Read()) { i=result.GetInt32(0); } result.Close(); return i; } catch(System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行一條計算查詢結果語句,返回查詢結果(object)。 /// </summary> /// <param name="SQLString"></param> /// <returns></returns> public static object GetSingle(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(SQLString,connection); try { connection.Open(); object obj = cmd.ExecuteScalar(); if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value))) { return null; } else { return obj; } } catch(System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行查詢語句,返回SqlDataReader /// </summary> /// <param name="strSQL"></param> /// <returns></returns> public static SqlDataReader ExecuteReader(string strSQL) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(strSQL,connection); SqlDataReader myReader; try { connection.Open(); myReader = cmd.ExecuteReader(); return myReader; } catch(System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行查詢語句,返回DataSet /// </summary> /// <param name="SQLString"></param> /// <returns></returns> public static DataSet Query(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet ds = new DataSet(); try { connection.Open(); SqlDataAdapter command = new SqlDataAdapter(SQLString,connection); command.Fill(ds,"ds"); } catch(System.Data.SqlClient.SqlException ex) { throw new Exception(ex.Message); } return ds; } } #region 存儲過程操做 /// <summary> /// 運行存儲過程 /// </summary> /// <param name="storedProcName"></param> /// <param name="parameters"></param> /// <returns></returns> public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters ) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand( connection,storedProcName, parameters ); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(); //Connection.Close(); return returnReader; } } private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand( storedProcName, connection ); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) { command.Parameters.Add( parameter ); } return command; } public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName ) { using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters ); sqlDA.Fill( dataSet, tableName ); connection.Close(); return dataSet; } } #endregion } } -------------------------------------------------------------------------------------------------------------------------------- //這是我更新的一個版本,與上面能夠說變化至關大 //其中FlashGateway是Flash Remoting的一個dll你們能夠去掉相關代碼,不影響使用 using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.SqlClient; using System.Drawing; using mvi.sysmanage; using FlashGateway.IO; namespace mvi.dbaccess { #region class sqlcom /// <summary> /// sqlcom /// </summary> public class sqlCom { //FLASHSRV/HIPIHI //private string DBCnStr = @"Data Source=FLASHSRV;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=1"; private string DBCnStr = @"Data Source=mvi-dpe;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=mvi"; public sqlCom() { //DBCnStr = @"Data Source=FLASHSRV;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=1"; DBCnStr = @"Data Source=mvi-dpe;Initial Catalog=hipihi;Persist Security Info=True;User ID=sa;password=mvi"; } public sqlCom(string connectstring) { if (connectstring.Length > 1) { DBCnStr = connectstring; } } public string SQLCnStr { get { return DBCnStr; } set { DBCnStr = value; } } #region InitSqlConnection 初始化Sql鏈接字符串 /// <summary> /// 初始化Sql鏈接字符串 /// </summary> /// <param name="DBCnStr">傳入的dbconnection</param> /// <param name="cmdText">傳入的cmd text</param> /// <returns>sql server connection string</returns> private string InitSqlConnection(string DBCnStr, string cmdText) { // temp code return DBCnStr; //// final code //int iD = DBCnStr.IndexOf("Data Source="); //int iL = DBCnStr.Substring(iD + 12).Split(';')[0].Length; //string strSqlServerName = DBCnStr.Substring(iD + 12, iL); //string strNewSqlServerName = GetSqlServerName(cmdText); //return DBCnStr.Replace(strSqlServerName, strNewSqlServerName); } #endregion #region GetSqlServerName 由sql string 獲取數據庫服務器名 /// <summary> /// 由sql string 獲取sql server name /// </summary> /// <param name="cmdText">傳入的cmd text</param> /// <returns>sql server name</returns> private string GetSqlServerName(string cmdText) { return cmdText.Substring(cmdText.IndexOf("from") + 5).Split('.')[0].ToString(); } #endregion # region GetDataSet 經過執行SQL語句返回一個狀態 /// <summary> /// 經過執行SQL語句返回一個狀態 /// </summary> /// <param name="cmdText">「SQL 文本」</param> /// <param name="oCn">"鏈接對象"</param> /// <param name="oDs">"引用的DataSet它將在程序中改變內容"</param> /// <returns>"成功則返回0,不然返回錯誤代碼"</returns> public int GetDataSet(string cmdText, ref DataSet oDs) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //定義數據適配對象 SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn); int status = -1; try { //填充DataSet oleDataAdapter.Fill(oDs); status = 0; } catch (Exception oErr) { Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleDataAdapter = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion # region GetDataTable 執行SQL語句並返回一個表 /// <summary> /// 執行SQL語句並返回一個表 /// </summary> /// <param name="cmdText">SQL文本</param> /// <param name="DBCnStr">dbconnect</param> /// <param name="inDt">返回表</param> /// <returns>成功則返回0,不然返回錯誤代碼</returns> public int GetDataTable(string cmdText, ref DataTable inDt) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //創建數據適配對象 SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn); int status = -1; try { //填充數據表 oleDataAdapter.Fill(inDt); status = 0; } catch (Exception oErr) { //異常處理 //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleDataAdapter = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion # region GetDataTable 執行SQL語句並返回一個表 /// <summary> /// 執行SQL語句並返回一個表 /// </summary> /// <param name="cmdText">SQL文本</param> /// <param name="DBCnStr">dbconnect</param> /// <param name="inDt">返回表</param> /// <returns>成功則返回0,不然返回錯誤代碼</returns> public int GetCount(string cmdText) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //創建數據適配對象 SqlDataAdapter oleDataAdapter = new SqlDataAdapter(cmdText, oCn); DataTable inDt = new DataTable(); int status = -1; try { //填充數據表 oleDataAdapter.Fill(inDt); status = inDt.Rows.Count; } catch (Exception oErr) { Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleDataAdapter = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion # region // GetNVColl 執行SQL語句並返回NameValueCollection ///// <summary> ///// 執行SQL語句並返回NameValueCollection ///// </summary> ///// <param name="cmdText">SQL文本</param> ///// <param name="NameValueCollection">nvColl</param> ///// <returns>成功則返回0,不然返回錯誤代碼</returns> //public int GetNVColl(string cmdText, ref NameValueCollection nvColl) //{ // DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); // SqlConnection oCn = new SqlConnection(DBCnStr); // try // { // oCn.Open(); // } // catch (Exception oErr) // { // //WriteFile(oErr.Message); // Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); // return -1; // } // //創建數據讀取對象 // SqlCommand oleCommand = new SqlCommand(cmdText, oCn); // //填充SqlDataReader // SqlDataReader oleReader; // int status = -1; // try // { // oleReader = oleCommand.ExecuteReader(); // // Always call Read before accessing data. // while (oleReader.Read()) // { // for (int i = 0; i < oleReader.FieldCount; i++) // { // if (oleReader.GetValue(i).ToString() != "") // nvColl.Add(oleReader.GetName(i), oleReader.GetString(i)); // } // } // status = 0; // } // catch (Exception oErr) // { // //異常處理 // //WriteFile(oErr.Message); // Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); // status = -1; // } // finally // { // oleReader = null; // if (oCn.State == System.Data.ConnectionState.Open) // { // oCn.Close(); // } // } // return status; //} #endregion // #region GetArrayList 執行SQL語句並返回一個ArrayList ///// <summary> ///// 執行SQL語句並返回一個ArrayList ///// </summary> ///// <param name="cmdText">SQL文本</param> ///// <returns>返回ArrayList arraylist[i]爲name,arraylist[i+1]爲value</returns> //public ArrayList GetArrayList(string cmdText, ref ArrayList aName, ref ArrayList aValue) //{ // ArrayList aNameValue = new ArrayList(); // SqlConnection oCn = new SqlConnection(DBCnStr); // try // { // oCn.Open(); // } // catch (Exception oErr) // { // //WriteFile(oErr.Message); // Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); // return null; // } // //創建數據讀取對象 // SqlCommand oleCommand = new SqlCommand(cmdText, oCn); // //填充SqlDataReader // SqlDataReader oleReader; // ArrayList status = null; // try // { // oleReader = oleCommand.ExecuteReader(); // // Always call Read before accessing data. // while (oleReader.Read()) // { // for (int i = 0; i < oleReader.FieldCount; i++) // { // if (oleReader.GetValue(i).ToString() != "") // aName.Add(oleReader.GetName(i)); // aValue.Add(oleReader.GetString(i + 1)); // } // } // status = aValue; // } // catch (Exception oErr) // { // //異常處理 // //WriteFile(oErr.Message); // Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); // status = null; // } // finally // { // oleReader = null; // if (oCn.State == System.Data.ConnectionState.Open) // { // oCn.Close(); // } // } // return status; //} #endregion // #region GetArrayList 執行SQL語句並返回一個ArrayList /// <summary> /// 執行SQL語句並返回一個ArrayList /// </summary> /// <param name="cmdText">SQL文本</param> /// <returns>返回ArrayList arraylist[i]爲name,arraylist[i+1]爲value</returns> public int GetArrayList(string cmdText, ref ArrayList aNameValue) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //創建數據讀取對象 SqlCommand oleCommand = new SqlCommand(cmdText, oCn); //填充SqlDataReader SqlDataReader oleReader; int status = -1; try { oleReader = oleCommand.ExecuteReader(); // Always call Read before accessing data. while (oleReader.Read()) { for (int i = 0; i < oleReader.FieldCount - 1; i ++ ) { if (oleReader.GetValue(i).ToString() != "") aNameValue.Add(oleReader.GetName(i)); } } status = 1; } catch (Exception oErr) { //異常處理 //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleReader = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion #region GetASObject 執行SQL語句並返回一個包含多條數據的ASObject (name,value) /// <summary> /// 執行SQL語句,查詢兩個字段,並返回一個ASObject /// </summary> /// <param name="cmdText">SQL文本</param> /// <param name="asO">ASObject 對象</param> /// <returns>返回int ASObject[i]爲(name,value)</returns> public int GetASObjectMulti(string cmdText, ref ASObject asO) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //創建數據讀取對象 SqlCommand oleCommand = new SqlCommand(cmdText, oCn); //填充SqlDataReader SqlDataReader oleReader; int status = -1; try { int i = 1; oleReader = oleCommand.ExecuteReader(); // Always call Read before accessing data. while (oleReader.Read()) { for (int j = 0; j < oleReader.FieldCount; j++) { asO.Add(i+"@"+oleReader.GetName(j),oleReader.GetValue(j));//i@+"name",i爲第幾條數據的序號 } i++; } status = 1; } catch (Exception oErr) { //異常處理 //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleReader = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion #region GetASObjectSingle 執行SQL語句並返回一個包含單條數據的ASObject (name,value) /// <summary> /// 執行SQL語句查詢一條數據(必須返回一條數據),返回一個ASObject /// </summary> /// <param name="cmdText">SQL文本</param> /// <param name="asO">ASObject 對象</param> /// <returns>返回int ASObject[i]爲(name,value)</returns> public int GetASObjectSingle(string cmdText, ref ASObject asO) { DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } //創建數據讀取對象 SqlCommand oleCommand = new SqlCommand(cmdText, oCn); //填充SqlDataReader SqlDataReader oleReader; int status = -1; try { //oleReader = oleCommand.ExecuteScalar(); // modified by apenni 2006-5-6 oleReader = oleCommand.ExecuteReader(); // Always call Read before accessing data. while (oleReader.Read()) { for (int i = 0; i < oleReader.FieldCount; i++) { asO.Add(oleReader.GetName(i), oleReader.GetValue(i)); } } status = 1; } catch (Exception oErr) { //異常處理 //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { oleReader = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } return status; } #endregion #region ExecuteSql 執行SET,DELETE語句時返回影響的行數 /// <summary> /// 執行SET,DELETE語句時返回影響的行數 /// </summary> /// <param name="cmdText">「SQL文本」</param> /// <returns>「返回影響的行數,不然返回錯誤代碼」</returns> public int ExecuteSql(string cmdText) { int intReturn = -1;//返回影響的行數。 SqlCommand oCmd = new SqlCommand(); DBCnStr = this.InitSqlConnection(DBCnStr, cmdText); SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } oCmd.Connection = oCn; oCmd.CommandType = CommandType.Text; oCmd.CommandText = cmdText; //定義事務 設定隔離級別 SqlTransaction oTx = oCn.BeginTransaction(IsolationLevel.ReadCommitted); oCmd.Transaction = oTx; //處理SQL語句 #region 事務處理 try { //支持事務 intReturn = oCmd.ExecuteNonQuery(); oTx.Commit(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); oTx.Rollback(); intReturn = -1; } finally { oCmd = null; oTx = null; if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } } #endregion return intReturn; } #endregion #region ExecuteSql 執行SET,DELETE語句時返回影響的行數 /// <summary> /// 執行SET,DELETE語句時返回影響的行數 /// </summary> /// <param name="cmdText">「SQL文本,支持多sql語句經過';'拼接」</param> /// <returns>「返回影響的行數,不然返回錯誤代碼」</returns> public int ExecuteSql(params string[] cmdText) { string strSql = string.Empty; foreach (string strCmd in cmdText) { strSql += strCmd; } return ExecuteSql(strSql); } //added by apenni 2006-5-6 #endregion #region CallStoreProc 調用系統存儲過程返回一個整數 /// <summary> /// 調用系統存儲過程返回一個整數 /// </summary> /// <param name = "strSysSPName">「存儲過程枚舉類型」</param> /// <param name="InParaName">"in參數名字"</param> /// <param name = "ParamValue">「參數列表」</param> /// <param name="OutParaName">"out參數名字"</param> /// <param name="OutParaValue">"返回的參數值"</param> /// <param name="IType">"out參數的類型"</param> /// <returns>"成功則返回所影響的行數,不然返回-1"</returns> public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType) { int inReturn = -1; SqlCommand oCmd = new SqlCommand(); oCmd.CommandText = strSysSPName; oCmd.CommandType = CommandType.StoredProcedure; #region in參數的創建 if (InParamValue != null && InParaName != null) { //創建in參數 for (int i = 0; i < InParamValue.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (InParaName[i] != null) { oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]); oPara.Direction = ParameterDirection.Input; oCmd.Parameters.Add(oPara); } } } #endregion #region out參數的創建 if (OutParaName != null && OutParaValue != null && IType != null) { //創建in參數 for (int i = 0; i < OutParaName.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (OutParaName[i] != null) { oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString()); oPara.Direction = ParameterDirection.Output; oCmd.Parameters.Add(oPara); } } } #endregion SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } oCmd.Connection = oCn; //鏈接數據庫和執行存儲過程 try { inReturn = oCmd.ExecuteNonQuery(); for (int i = 0; i < OutParaValue.Length; i++) { OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value; } } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); inReturn = -1; } finally { if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } oCmd = null; } return inReturn; } #endregion #region CallStoreProc 調用系統存儲過程並影響生成一個object對象值 /// <summary> /// 調用系統存儲過程並影響生成一個object對象值 /// </summary> /// <param name = "strSysSPName">「存儲過程枚舉類型」</param> /// <param name="InParaName">"in參數名字"</param> /// <param name = "InParamValue">「in參數列表」</param> /// <param name="OutParaName">"out參數名字"</param> /// <param name="OutParaValue">"out參數值"</param> /// <param name="IType">"out參數的類型"</param> /// <param name="inObject">"引用的值"</param> /// <returns>成功則返回1,不然返回-1或錯誤代碼</returns> public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref object objReturn) { //創建Command對象 SqlCommand oCmd = new SqlCommand(); oCmd.CommandText = strSysSPName.ToString(); oCmd.CommandType = CommandType.StoredProcedure; int status = -1; #region in參數的創建 if (InParamValue != null && InParaName != null) { //創建in參數 for (int i = 0; i < InParamValue.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (InParaName[i] != null) { oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]); oPara.Direction = ParameterDirection.Input; oCmd.Parameters.Add(oPara); } } } #endregion #region out參數的創建 if (OutParaName != null && OutParaValue != null && IType != null) { //創建in參數 for (int i = 0; i < OutParaName.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (OutParaName[i] != null) { oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString()); oPara.Direction = ParameterDirection.Output; oCmd.Parameters.Add(oPara); } } } #endregion SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } oCmd.Connection = oCn; //鏈接數據庫和執行存儲過程 try { //經過SqlDataAdapter來填充Table objReturn = oCmd.ExecuteScalar(); #region 取得返回參數的值 for (int i = 0; i < OutParaValue.Length; i++) { OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value; } #endregion status = 0; } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } oCmd = null; } return status; } #endregion #region CallStoreProc 調用用戶存儲過程返回一個DataTable(Select 語句) /// <summary> /// 調用用戶存儲過程返回一個DataTable(Select 語句) /// </summary> /// <param name = "strSPName">「存儲過程名」</param> /// <param name="InParaName">"in參數名字"</param> /// <param name = "InParamValue">「in參數列表」</param> /// <param name="OutParaName">"out參數名字"</param> /// <param name="IType">"out參數的類型"</param> /// <param name="OutParaValue">"out參數值"</param> /// <param name="oDT">"傳入的DataTable引用"</param> ///<returns>"成功則返回1,不然返回-1或錯誤代碼"</returns> public int CallStoreProc(string strSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref DataTable oDT) { //創建Command對象 SqlCommand oCmd = new SqlCommand(); oCmd.CommandText = strSPName.ToString(); oCmd.CommandType = CommandType.StoredProcedure; int status = -1; #region in參數的創建 if (InParamValue != null && InParaName != null) { //創建in參數 for (int i = 0; i < InParamValue.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (InParaName[i] != null) { oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]); oPara.Direction = ParameterDirection.Input; oCmd.Parameters.Add(oPara); } } } #endregion #region out參數的創建 if (OutParaName != null && OutParaValue != null && IType != null) { //創建in參數 for (int i = 0; i < OutParaName.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (OutParaName[i] != null) { oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString()); oPara.Direction = ParameterDirection.Output; oCmd.Parameters.Add(oPara); } } } #endregion SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } oCmd.Connection = oCn; //鏈接數據庫和執行存儲過程 try { //經過SqlDataAdapter來填充Table SqlDataAdapter oDp = new SqlDataAdapter(oCmd.CommandText.ToString(), oCn); //創建SqlDataAdapter與SqlCommand的鏈接 oDp.SelectCommand = oCmd; oDp.DeleteCommand = oCmd; oDp.UpdateCommand = oCmd; oDp.DeleteCommand = oCmd; //填充DataTable oDp.Fill(oDT); #region 取得返回參數的值 for (int i = 0; i < OutParaValue.Length; i++) { OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value; } #endregion status = 0; } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } oCmd = null; } return status; } #endregion #region CallStoreProc 調用系統存儲過程並影響生成一個DataSet對象 /// <summary> /// 調用系統存儲過程並影響生成一個DataSet對象 /// </summary> /// <param name = "strSysSPName">「存儲過程枚舉類型」</param> /// <param name="InParaName">"in參數名字"</param> /// <param name = "InParamValue">「in參數列表」</param> /// <param name="OutParaName">"out參數名字"</param> /// <param name="OutParaValue">"out參數值"</param> /// <param name="IType">"out參數的類型"</param> /// <param name=" oDs">"引用的DataSet"</param> /// <returns>成功則返回1,不然返回-1或錯誤代碼</returns> public int CallStoreProc(string strSysSPName, IList InParaName, IList InParamValue, IList OutParaName, ref object[] OutParaValue, DBTYPE[] IType, ref DataSet oDs) { SqlCommand oCmd = new SqlCommand(); oCmd.CommandText = strSysSPName; oCmd.CommandType = CommandType.StoredProcedure; int status = -1; #region in參數的創建 if (InParamValue != null && InParaName != null) { //創建in參數 for (int i = 0; i < InParamValue.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (InParaName[i] != null) { oPara = SQLParamHelper.CreateParameterWithValue(InParaName[i].ToString(), InParamValue[i]); oPara.Direction = ParameterDirection.Input; oCmd.Parameters.Add(oPara); } } } #endregion #region out參數的創建 if (OutParaName != null && OutParaValue != null && IType != null) { //創建in參數 for (int i = 0; i < OutParaName.Count; i++) { SqlParameter oPara = new SqlParameter(); //調用SQLParamHelper的CreateParameterWithValue()方法來生成不一樣的參數 if (OutParaName[i] != null) { oPara = SQLParamHelper.CreateOutParameterWithValue(OutParaName[i].ToString(), IType[i].ToString()); oPara.Direction = ParameterDirection.Output; oCmd.Parameters.Add(oPara); } } } #endregion SqlConnection oCn = new SqlConnection(DBCnStr); try { oCn.Open(); } catch (Exception oErr) { //WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); return -1; } oCmd.Connection = oCn; //鏈接數據庫和執行存儲過程 try { //經過SqlDataAdapter來填充Table SqlDataAdapter oDp = new SqlDataAdapter(oCmd.CommandText.ToString(), oCn); //創建SqlDataAdapter與SqlCommand的鏈接 oDp.SelectCommand = oCmd; oDp.DeleteCommand = oCmd; oDp.UpdateCommand = oCmd; oDp.DeleteCommand = oCmd; // oDp.Fill(oDs); #region 取得返回參數的值 for (int i = 0; i < OutParaValue.Length; i++) { OutParaValue[i] = oCmd.Parameters[OutParaName[i].ToString()].Value; } #endregion status = 0; } catch (Exception oErr) { // WriteFile(oErr.Message); Errlog.AppLog(oErr.Message, ErrorType.MviDataBase); status = -1; } finally { if (oCn.State == System.Data.ConnectionState.Open) { oCn.Close(); } oCmd = null; } return status; } #endregion #region GetSqlWhere 產生SQL語句 /// <summary> /// 產生SQL語句 /// </summary> /// <param name="InName">表字段名</param> /// <param name="InValue">表字段值</param> /// <returns>結果SQL語句</returns> public string GetSqlWhere(ArrayList InName, ArrayList InValue) { DataTable DataTableTmp = new DataTable(); string StrSqlWhereTmp = ""; string StrTmp = ""; string StrName = ""; string StrValue = ""; if (InName == null || InValue == null) { return null; } for (int i = 0; i < InName.Count; i++) { StrTmp = InName[i].ToString(); if (StrTmp.Substring(0, 2) == "#S") //開始時間 { StrName = StrTmp.Substring(2) + " >= "; StrValue = "to_date('" + InValue[i].ToString() + "','yyyy-mm-dd HH24:Mi:ss')"; } else if (StrTmp.Substring(0, 2) == "#E")//結束時間 { StrName = StrTmp.Substring(2) + " < "; StrValue = "to_date('" + InValue[i].ToString() + "','yyyy-mm-dd HH24:Mi:ss')"; } else if (StrTmp.Substring(0, 2) == "#N")//<>條件 { StrName = StrTmp.Substring(2) + " <> "; StrValue = InValue[i].ToString(); } else if (StrTmp.Substring(0, 2) == "#D")//大於條件 { StrName = StrTmp.Substring(2) + ">"; StrValue = InValue[i].ToString(); } else if (StrTmp.Substring(0, 2) == "#X")//小於條件 { StrName = StrTmp.Substring(2) + "<"; StrValue = InValue[i].ToString(); } else if (StrTmp.Substring(0, 2) == "#I")//IN條件 { StrName = StrTmp.Substring(2) + " IN ("; StrValue = InValue[i].ToString() + ")"; } else if (StrTmp.Substring(0, 2) == "#0")//沒有條件 { return InValue[i].ToString(); } else //等於條件 { StrName = StrTmp + "="; StrValue = InValue[i].ToString(); } StrSqlWhereTmp = StrSqlWhereTmp + StrName + StrValue + " and "; } StrSqlWhereTmp = StrSqlWhereTmp.Substring(0, StrSqlWhereTmp.Length - 5); return StrSqlWhereTmp; } #endregion } #endregion #region class SQLParamHelper /// <summary> /// SQLParamHelper /// </summary> internal class SQLParamHelper { #region 建立出入參數 /// <summary> /// 根據輸入的OBJECT對象生成不一樣的參數 /// </summary> /// <param name="name">「參數名字」</param> /// <param name="nValue">「參數值」</param> /// <returns></returns> public static SqlParameter CreateParameterWithValue(string name, object nValue) { string strType; SqlParameter param; int intLenth = 0; if (nValue != null) { strType = nValue.GetType().ToString(); intLenth = nValue.ToString().Trim().Length; if (intLenth > 0) { switch (strType) { case "System.Int32": { param = new SqlParameter(name, SqlDbType.BigInt, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Double": { param = new SqlParameter(name, SqlDbType.Decimal); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Single": { param = new SqlParameter(name, SqlDbType.Float); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.UInt64": { param = new SqlParameter(name, SqlDbType.BigInt, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Int64": { param = new SqlParameter(name, SqlDbType.BigInt, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Decimal": { param = new SqlParameter(name, SqlDbType.Decimal, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Object": { param = new SqlParameter(name, SqlDbType.Real, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.UInt16": { param = new SqlParameter(name, SqlDbType.BigInt, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Int16": { param = new SqlParameter(name, SqlDbType.BigInt, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Boolean": { param = new SqlParameter(name, SqlDbType.Binary); param.Direction = ParameterDirection.Input; bool bolTemp = (bool)nValue; param.Value = (bolTemp == true ? 1 : 0); break; } case "System.String": { param = new SqlParameter(name, SqlDbType.VarChar, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.DateTime": { param = new SqlParameter(name, SqlDbType.DateTime, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Char": { param = new SqlParameter(name, SqlDbType.Char, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.SByte": { param = new SqlParameter(name, SqlDbType.Bit, intLenth); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System_XMl": { param = new SqlParameter(name, SqlDbType.Xml, 300); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } case "System.Text": { if (intLenth < 2000) { param = new SqlParameter(name, SqlDbType.Text, intLenth); } else { param = new SqlParameter(name, SqlDbType.Text); } param.Direction = ParameterDirection.Input; param.Value = nValue; break; } default: { param = new SqlParameter(name, SqlDbType.Variant); param.Direction = ParameterDirection.Input; param.Value = nValue; break; } } param.Direction = ParameterDirection.Input; } else { param = new SqlParameter(name, SqlDbType.VarChar, 10); param.Direction = ParameterDirection.Input; param.Value = ""; } } else { param = new SqlParameter(name, SqlDbType.Variant); param.Direction = ParameterDirection.Input; param.Value = null; } return param; } #endregion #region CreateOutParameterWithValue 創建輸出參數 /// <summary> /// 創建輸出參數 /// </summary> /// <param name="name">"參數名"</param> /// <param name="objType">"參數類型"</param> /// <returns></returns> public static SqlParameter CreateOutParameterWithValue(string name, string objType) { string strType = objType; SqlParameter param; switch (strType) { case "System_Object": { param = new SqlParameter(name, SqlDbType.Variant); param.Direction = ParameterDirection.Output; break; } case "System_Single": { param = new SqlParameter(name, SqlDbType.Float); param.Direction = ParameterDirection.Output; break; } case "System_UInt64": { param = new SqlParameter(name, SqlDbType.BigInt); param.Direction = ParameterDirection.Output; break; } case "System_Int64": { param = new SqlParameter(name, SqlDbType.BigInt); param.Direction = ParameterDirection.Output; break; } case "System_Int32": { param = new SqlParameter(name, SqlDbType.Int); param.Direction = ParameterDirection.Output; break; } case "System_UInt16": { param = new SqlParameter(name, SqlDbType.SmallInt); param.Direction = ParameterDirection.Output; break; } case "System_Int16": { param = new SqlParameter(name, SqlDbType.SmallInt); param.Direction = ParameterDirection.Output; break; } case "System_Double": { param = new SqlParameter(name, SqlDbType.Float); param.Direction = ParameterDirection.Output; break; } case "System_Decimal": { param = new SqlParameter(name, SqlDbType.Decimal); param.Direction = ParameterDirection.Output; break; } case "System_Boolean": { param = new SqlParameter(name, SqlDbType.Binary); param.Direction = ParameterDirection.Output; break; } case "System_String": { param = new SqlParameter(name, SqlDbType.VarChar, 200); param.Direction = ParameterDirection.Output; break; } case "System_DateTime": { param = new SqlParameter(name, SqlDbType.DateTime); param.Direction = ParameterDirection.Output; break; } case "System_Char": { param = new SqlParameter(name, SqlDbType.Char, 100); param.Direction = ParameterDirection.Output; break; } case "System_SByte": { param = new SqlParameter(name, SqlDbType.NChar, 30); param.Direction = ParameterDirection.Output; break; } case "System_Text": { param = new SqlParameter(name, SqlDbType.Text, 300); param.Direction = ParameterDirection.Output; break; } case "System_XMl": { param = new SqlParameter(name, SqlDbType.Xml, 300); param.Direction = ParameterDirection.Output; break; } default: { param = new SqlParameter(name, SqlDbType.Variant); param.Direction = ParameterDirection.Output; break; } } return param; } #endregion CreateOutParams #region CreateParameter 建立形式參數 /// <summary> /// 轉換參數爲SQL語句的表達式 /// </summary> /// <param name="nValue">傳入的Object類型值</param> /// <returns>已經轉換好的String</returns> public static string CreateParameter(SqlParameter oValue) { string strTemPara; object oPara_Value = oValue.Value; if (oPara_Value != null) { string strType = oValue.SqlDbType.ToString(); switch (strType) { case "VarChar": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } case "Char": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } case "NChar": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } case "NVarChar": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } //日期型 case "DateTime": { DateTime dt = new DateTime(); dt = (DateTime)oPara_Value; string strTP = "'" + dt.Year + "-" + dt.Month + "-" + dt.Day; strTP += " " + dt.Hour.ToString() + ":" + dt.Minute.ToString(); strTP += ":" + dt.Second.ToString() + "',"; strTemPara = "TO_DATE(" + strTP + "'yyyy-mm-dd hh24:mi:ss'" + ")"; break; } case "LongVarChar": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } case "Clob": { strTemPara = "'" + CheckMark(oPara_Value) + "'"; break; } default: { strTemPara = oPara_Value.ToString(); break; } } } else { //將null傳入 strTemPara = "null"; } return strTemPara; } #endregion #region CheckMark 替換object的'爲''並轉換爲String /// <summary> /// 替換object的'爲''並轉換爲String /// </summary> /// <param name="objIn">傳入的Object類型</param> /// <returns>已經替換'爲''的String</returns> private static string CheckMark(object objIn) { string strTmp = objIn.ToString(); return strTmp.Replace("'", "''"); // modified by apenni 06.01.02 //string strRet = ""; //for (int i = 0; i < strTmp.Length; i++) //{ // if (strTmp[i].ToString() == "'") // { // strRet += "''"; // } // else // { // strRet += strTmp[i].ToString(); // } //} //return strRet; } #endregion } #endregion