SqlHelper详解(转载)
生活随笔
收集整理的這篇文章主要介紹了
SqlHelper详解(转载)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SqlHelper 類實(shí)現(xiàn)詳細(xì)信息 SqlHelper 類用于通過一組靜態(tài)方法來封裝數(shù)據(jù)訪問功能。該類不能被繼承或?qū)嵗?#xff0c;因此將其聲明為包含專用構(gòu)造函數(shù)的不可繼承類。 在 SqlHelper 類中實(shí)現(xiàn)的每種方法都提供了一組一致的重載。這提供了一種很好的使用 SqlHelper 類來執(zhí)行命令的模式,同時為開發(fā)人員選擇訪問數(shù)據(jù)的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數(shù),因此開發(fā)人員可以確定傳遞連接、事務(wù)和參數(shù)信息的方式。在 SqlHelper 類中實(shí)現(xiàn)的方法包括: ExecuteNonQuery。此方法用于執(zhí)行不返回任何行或值的命令。這些命令通常用于執(zhí)行數(shù)據(jù)庫更新,但也可用于返回存儲過程的輸出參數(shù)。 ExecuteReader。此方法用于返回 SqlDataReader 對象,該對象包含由某一命令返回的結(jié)果集。 ExecuteDataset。此方法返回 DataSet 對象,該對象包含由某一命令返回的結(jié)果集。 ExecuteScalar。此方法返回一個值。該值始終是該命令返回的第一行的第一列。 ExecuteXmlReader。此方法返回 FOR XML 查詢的 XML 片段。 除了這些公共方法外,SqlHelper 類還包含一些專用函數(shù),用于管理參數(shù)和準(zhǔn)備要執(zhí)行的命令。不管客戶端調(diào)用什么樣的方法實(shí)現(xiàn),所有命令都通過 SqlCommand 對象來執(zhí)行。在 SqlCommand 對象能夠被執(zhí)行之前,所有參數(shù)都必須添加到 Parameters 集合中,并且必須正確設(shè)置 Connection、CommandType、CommandText 和 Transaction 屬性。SqlHelper 類中的專用函數(shù)主要用于提供一種一致的方式,以便向 SQL Server 數(shù)據(jù)庫發(fā)出命令,而不考慮客戶端應(yīng)用程序調(diào)用的重載方法實(shí)現(xiàn)。SqlHelper 類中的專用實(shí)用程序函數(shù)包括: AttachParameters:該函數(shù)用于將所有必要的 SqlParameter 對象連接到正在運(yùn)行的 SqlCommand。 AssignParameterValues:該函數(shù)用于為 SqlParameter 對象賦值。 PrepareCommand:該函數(shù)用于對命令的屬性(如連接、事務(wù)環(huán)境等)進(jìn)行初始化。 ExecuteReader:此專用 ExecuteReader 實(shí)現(xiàn)用于通過適當(dāng)?shù)?CommandBehavior 打開 SqlDataReader 對象,以便最有效地管理與閱讀器關(guān)聯(lián)的連接的有效期。 SqlHelper體驗(yàn)談: 以下載自CEOCIO(MVP/CSDN_WEB開發(fā)版主)的Blog(51aspx.com): 微軟提供的Data Access Application Block中的SQLHelper類中封裝了最常用的數(shù)據(jù)操作,各個使用者調(diào)用他而寫的代碼也有很大區(qū)別。 對于一個返回DataSet的方法我原來是這樣寫的: public DataSet GetDepartmentMemberList(int departmentID) { try { string sql = "OA_Department_GetDepartment_Members"; string conn = ConfigurationSettings.AppSettings["strConnection"]; SqlParameter[] p = { SqlHelper.MakeInParam("@departmentID",SqlDbType.Int,4,departmentID) }; DataSet ds = SqlHelper.ExecuteDataset(conn,CommandType.StoredProcedure,sql,p); return ds; } catch(System.Data.SqlClient.SqlException er) { throw new Exception(er.Message); } } 復(fù)制代碼 現(xiàn)在我是這樣來寫的: //連接字符串 private string _connectionString = ConfigurationSettings.AppSettings["strConnection"]; public string ConnectionString { get {return this._connectionString;} set {this._connectionString = value;} } public DataSet GetNewsToIndexPage(int NewsTypeID) { return GetDataSet("yzb_GetNewsToIndexPage",GetNewsToIndexPage_Parameters(NewsTypeID)); } 復(fù)制代碼 //設(shè)置存儲過程參數(shù) private SqlParameter[] GetNewsToIndexPage_Parameters(int NewsTypeID) { SqlParameter[] p = { SqlHelper.MakeInParam("@NewsTypeID",SqlDbType.Int,4,NewsTypeID) }; return p; } 復(fù)制代碼 //這里才真正調(diào)用SqlHelper private DataSet GetDataSet(string sql, params SqlParameter[] p) { return SqlHelper.ExecuteDataset(ConnectionString,CommandType.StoredProcedure,sql,p); } 復(fù)制代碼 代碼更加靈活,更加安全了:P 做為一個懶人,大笨狼51aspx我經(jīng)常這樣寫: System.Data.DataTable dt=SqlHelper.ExecuteDataset(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql).Tables[0]; 復(fù)制代碼 直接返回DataTable, 返回表集合基本不用,只返回一個table用于綁定。 string conn = ConfigurationSettings.AppSettings["strConnection"]; 我寫在SqlHelper.CONN_STRING_NON_DTC里面 MakeInParam代碼煩瑣,如果查詢輸入條件不可能有組合SQL, 我直接exec pronamr paraargs 如果查詢輸入條件存在安全問題,或者帶返回參數(shù) 再用 SqlParameter[] queryParam=new SqlParameter[] { new SqlParameter("@UserID",SqlDbType.Int) }; queryParam[0].Value=this.UserID; 復(fù)制代碼 組合sql語句用到@和string.Format技巧.例如: sql=@"UPDATE Test_User_Statistic SET Test_User_Statistic.[IsQualified]={0}, Test_User_Statistic.[Reason]='{1}' WHERE UserID={2}" ; sql= string.Format(sql,IsQualified,Reason,userID); SqlHelper.ExecuteNonQuery(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql); 復(fù)制代碼 其中sql語句可以借助SQL的查詢分析器生成。這么干要保證安全,如果有輸入漏洞,建議還是用SqlParameter[]緩存參數(shù),因?yàn)樗鼤压粜缘拇a,比如帶單引號分號的,當(dāng)作普通字符處理。
?
《新SqlHelper 配置和應(yīng)用方法詳解 》http://blog.csdn.net/bobby96333/article/details/7241289轉(zhuǎn)載于:https://www.cnblogs.com/johntom/archive/2012/04/06/2435383.html
總結(jié)
以上是生活随笔為你收集整理的SqlHelper详解(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 假日
- 下一篇: 【编程之美】金刚坐飞机问题