ADO.Net中通過HashTable對SqlParameter賦值的三種方法和返回DataTable的兩種方式

      一、得到數據庫連接

        /// <summary>
        /// 得到數據連接
        /// </summary>
        /// <returns>返回連接字符串</returns>

        private string getConnectionString()
        {
            string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
            return strConn;
        }
      二、執行操作

       /// <summary>
        /// 執行sqlCommand
        /// </summary>
        /// <param name="sqlCommand">待執行的sql語句或存儲過程名</param>
        /// <param name="htParameters">參數集</param>
        /// <returns>數據集</returns>

        public DataTable ExecuteSqlCommand(string sqlCommand,Hashtable htParameters)
        {
            string strConn = this.getConnectionString();

            SqlConnection sqlConn = new SqlConnection(strConn);

            SqlTransaction sqlTran = sqlConn.BeginTransaction();

            DataTable dtReturn = new DataTable();

            try
            {
                if (sqlConn.State == ConnectionState.Closed)
                {
                    sqlConn.Open();
                }

                SqlCommand sqlCom = sqlConn.CreateCommand();

                sqlCom.CommandType = CommandType.Text;

                sqlCom.CommandText = sqlCommand;

                /*
                //當sqlCommand爲存儲過程名時,應爲如下所示

                sqlCom.CommandType = CommandType.StoredProcedure;

                sqlCom.CommandText = sqlCommand;
                */
 
                /*
                 //以下爲通過Hashtable對sqlcommand賦參的三種方法
                */
                //

                //
                //方法一、通過IDictionaryEnumerator接口賦值
                //

                IDictionaryEnumerator iDictionary = htParameters.GetEnumerator();

                while (iDictionary.MoveNext())
                {
                   object objKey = iDictionary.Key;

                    sqlCom.Parameters.Add(objKey.ToString());

                   sqlCom.Parameters[objKey.ToString()].Value = iDictionary.Value;
                }

                //
                //方法二、通過OBJECT賦值
                //
                foreach (object objKeys in htParameters.Keys)
                {
                    sqlCom.Parameters.Add(objKeys);

                    sqlCom.Parameters[objKeys.ToString()].Value = htParameters[objKeys];
               }
                //
                //方法三、通過DictionaryEntry賦值
                //
                foreach (DictionaryEntry dEntry in htParameters)
                {
                    sqlCom.Parameters.Add(dEntry.Key);

                    sqlCom.Parameters[dEntry.Key.ToString()].Value = dEntry.Value;
                }

                /*
                 //以下爲返回結果數據集以DataTable返回的兩種方法
                 //
                 //DataReader數據不在內存中緩存,適合於檢索大量數據
                 //
                */
                //
                //方法一、以SqlDataReader的形式返回DataTable數據集
                //

                SqlDataReader sqlReader = sqlCom.ExecuteReader();

                if (sqlReader.HasRows)
                {
                    dtReturn = sqlReader.GetSchemaTable();
                }

                //
                //方法二、以DataSet的形式返回DataTable數據集
                //

                SqlDataAdapter sqlData = new SqlDataAdapter(sqlCom);

                DataSet dtSet = new DataSet();

                sqlData.Fill(dtSet);

                dtReturn = dtSet.Tables[0];

            }
            catch (Exception ce)
            {
                sqlTran.Rollback();
                throw new ApplicationException(ce.Message.ToString());
            }
            finally
            {
                sqlTran.Commit();

                if (sqlConn.State == ConnectionState.Open)
                {
                    sqlConn.Close();
                }
            }

            return dtReturn;
        }
發佈了22 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章