1. 程式人生 > >asp.net使用ado連線資料庫

asp.net使用ado連線資料庫

 /// <summary>
    /// 資料訪問操作類
    /// chy710.cnblogs.com
    /// </summary>


    public class SqlDAO
    {
        //資料庫連線
private SqlConnection myConnection;
        private SqlTransaction sqlTrans;


        public SqlDAO()
        {
            myConnection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());


        }


        #region 執行儲存過程
        /// <summary>
        /// 執行儲存過程
        /// </summary>
        /// <param name="procName">儲存過程名</param>
        /// <param name="myPar">查詢引數</param>
        /// <returns>int</returns>
        public int RunProc(string procName, SqlParameter[] myPar)
        {
            try
            {
                myConnection.Open();
                SqlCommand cmd = new SqlCommand(procName, myConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                cmd.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));
                cmd.ExecuteNonQuery();
                return (int)cmd.Parameters["ReturnValue"].Value;
            }
            catch (Exception ex)
            {
                return -1;
            }
            finally
            {
                myConnection.Close();
            }
        }




        #region 查詢 返回DataTable
        /// <summary>
        /// 
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="myPar"></param>
        /// <returns></returns>
        public DataTable RunProcGetData(string procName, SqlParameter[] myPar)
        {
            try
            {
                myConnection.Open();
                SqlCommand cmd = new SqlCommand(procName, myConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                myConnection.Close();
            }
        }
        #endregion


        #region 查詢 返回DataTable
        /// <summary>
        /// 
        /// </summary>
        /// <param name="procName">儲存過程名</param>
        /// <param name="myPar">引數列表</param>
        /// <param name="startRecord">起始記錄</param>
        /// <param name="maxRecords">最大記錄</param>
        /// <returns>資料表</returns>
        public DataTable RunProcGetData(string procName, SqlParameter[] myPar, int startRecord, int maxRecords)
        {
            try
            {
                myConnection.Open();
                SqlCommand cmd = new SqlCommand(procName, myConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                DataSet ds = new DataSet();
                da.Fill(ds, startRecord, (maxRecords - startRecord + 1), "ReturnTable");
                return ds.Tables["ReturnTable"];
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                myConnection.Close();
            }
        }
        #endregion
        #endregion


        #region  執行SQL語句


        public int ExecuteSql(string strSql, SqlParameter[] myPar)
        {
            try
            {
                myConnection.Open();
                SqlCommand cmd = new SqlCommand(strSql, myConnection);
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                int result = cmd.ExecuteNonQuery();
                return result;
            }
            catch(Exception ex)
            {
                return -1;
            }
            finally
            {
                myConnection.Close();
            }
        }




        #region 查詢 返回DataTable
        public DataTable GetDataTable(string strSql, SqlParameter[] myPar)
        {
            try
            {
                myConnection.Open();
                SqlCommand cmd = new SqlCommand(strSql, myConnection);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch
            {
                return null;
            }
            finally
            {
                myConnection.Close();
            }
        }
        #endregion
        #endregion


        #region 帶事務的SQL語句 返回True OR False
        /// <summary>
        /// sql 語句事務
        /// </summary>
        /// <param name="listSqlPara">資料字典</param>
        /// <returns>bool</returns>
        public Boolean ExecuteTransation(Dictionary<string, SqlParameter[]> listSqlPara) //使用 傳入sql語句<BR>&nbsp;&nbsp;&nbsp; 
        {
            myConnection.Open();
            SqlCommand cmd = myConnection.CreateCommand();
            cmd.Connection = myConnection;
            SqlTransaction tx = myConnection.BeginTransaction();
            cmd.Transaction = tx;
            try
            {
                foreach (KeyValuePair<string, SqlParameter[]> item in listSqlPara)
                {
                    cmd.CommandText = item.Key.ToString();


                    if (item.Value != null)
                    {
                        foreach (SqlParameter spar in item.Value)
                        {
                            cmd.Parameters.Add(spar);
                        }
                    }
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                }
                tx.Commit();
            }
            catch
            {
                tx.Rollback();
                return false;
            }
            finally
            {
                myConnection.Close();
            }
            return true;
        }
        #endregion
        /// <summary>
        /// 資料庫的開啟
        /// </summary>
        /// <returns>SqlConnection</returns>
        public void ConnectionOpen()
        {
            if (myConnection.State == ConnectionState.Closed)
                myConnection.Open();


        }
        /// <summary>
        /// 資料庫的關閉
        /// </summary>
        public void ConnectionClose()
        {
            myConnection.Close();
        }
        /// <summary>
        /// 事務的開始
        /// </summary>
        /// <param name="stx">SqlTransaction</param>
        public void TransactionBegin()
        {
            sqlTrans = myConnection.BeginTransaction();


        }
        /// <summary>
        /// 事務提交
        /// </summary>
        /// <param name="sqltrans">事務類</param>
        public void TransactionCommit()
        {
            sqlTrans.Commit();
        }
        /// <summary>
        /// 事務的回滾
        /// </summary>
        /// <param name="sqltrans">事務類</param>
        public void TransactionRollback()
        {
            sqlTrans.Rollback();
        }
        /// <summary>
        /// 需要手動開啟資料庫連線
        /// </summary>
        /// <param name="procName">引數過程名</param>
        /// <param name="myPar">引數</param>
        /// <returns>int</returns>
        public int ExceturnProc(string procName, SqlParameter[] myPar)
        {
            try
            {
                SqlCommand cmd = new SqlCommand(procName, myConnection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Transaction = sqlTrans;
                if (myPar != null)
                {
                    foreach (SqlParameter spar in myPar)
                    {
                        cmd.Parameters.Add(spar);
                    }
                }
                cmd.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));
                cmd.ExecuteNonQuery();
                return (int)cmd.Parameters["ReturnValue"].Value;
            }
            catch
            {
                return -1;
            }
        }
    }