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));//[email protected]+"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
时间: 2024-11-03 21:42:20