C中SqlParameter類的使用方法小結(jié)_第1頁
C中SqlParameter類的使用方法小結(jié)_第2頁
C中SqlParameter類的使用方法小結(jié)_第3頁
C中SqlParameter類的使用方法小結(jié)_第4頁
C中SqlParameter類的使用方法小結(jié)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、C# 中SqlParameter類的使用方法小結(jié) 在c#中執(zhí)行sql語句時傳遞參數(shù)的小經(jīng)驗1、直接寫入法: 例如: int Id =1; string Name=lui; cmd.CommandText=insert into TUserLogin values(+Id+,+Name+); 因為Id是數(shù)值,所以在傳遞的時候只需要在sql字符串中用+Id+即可實現(xiàn),而 Name是字符串,所以在傳遞的時候還需要在+Name+兩邊各加一個單引號()來 實現(xiàn);2、給命令對象添加參數(shù)法: 例如: int Id =1; string Name=lui; cmd.CommandText=insert int

2、o TUserLogin values(Id,Name); /上條語句中直接在sql語句中寫添加的參數(shù)名,不論參數(shù)類型都是如此. SqlParameter para=new SqlParameter(Id,SqlDbT,4);/生成一個名字為Id的參數(shù),必須以開頭表示是添加的參數(shù),并設(shè)置其類型長度,類型長度與數(shù)據(jù)庫中對應(yīng)字段相同 para.Value=Id;/給參數(shù)賦值 cmd.Parameters.Add(para);/必須把參數(shù)變量添加到命令對象中去。 /以下類似 para=new SqlParameter(Name,SqlDbType.VarChar,16); para.V

3、alue=Name; com.Parameters.Add(para); .然后就可以執(zhí)行數(shù)據(jù)庫操作了。聲明:本帖轉(zhuǎn)自 /.html在此對本帖原創(chuàng)作者,致以最誠摯的謝意!=SqlParameter用法SqlParameter parameters = new SqlParameter(a, a1), new SqlParameter(b, b1) ; string strReturn = ; StringBuilder strBulResult = new StringBuilder(); foreach (SqlParameter parameter

4、 in parameters) strBulResult.Append(parameter.ParameterName); strBulResult.Append(:); strBulResult.Append(parameter.SqlValue); strBulResult.Append(n); strReturn = strBulResult.ToString();聲明:本帖轉(zhuǎn)自 /daxiongmao_adi/blog/item/d7ac6ccddeb34553.html在此對本帖原創(chuàng)作者,致以最誠摯的謝意!=SqlParameter用法 關(guān)于Sql

5、注入的基本概念,相信不需多說,大家都清楚,經(jīng)典的注入語句是 or 1=1-單引號而截斷字符串,“or 1=1”的永真式的出現(xiàn)使得表的一些信息被暴露出來,如果sql語句是select * from 的話,可能你整個表的信息都會被讀取到,更嚴(yán)重的是,如果惡意使用都使用drop命令,那么可能你的整個數(shù)據(jù)庫得全線崩潰。當(dāng)然,現(xiàn)在重點不是講sql注入的害處,而是說說如何最大限度的避免注入問題。sql注入的存在在最大危害,是sql的執(zhí)行語句沒有和控制語句分開,我們想要select一些東西,但用戶可能拼出 or 1=1甚至再加上delete/update/drop,后來是屬于控制語句了,所以要避免sql的注

6、入,就必須把查詢語句與控制語句分開。SqlParameter給我們提供了一個很好的類,有了它,我們可以不現(xiàn)拼接字符串,也可以不再擔(dān)心單引號帶來的慘劇,因為,這一切會有人來為我們完成的。簡單的給個示例傳統(tǒng)的查詢語句的sql可能為string sql=select * from users where user_id=+Request.QueryStringuid+;很顯然,我們在這里拼接了字符串,這就給sql注入留下了可乘之機?,F(xiàn)在,我們要改寫這樣的語句,使用SqlParameter來做SqlCommand SqlCmd = new SqlCommand(sql, SqlConn);SqlPar

7、ameter _userid = new SqlParameter(uid, SqlDbType.Int);_userid.Value = Request.QueryStringu_id;SqlCmd.Parameters.Add(_userid);這樣,我們可以保證外接參數(shù)能被正確的轉(zhuǎn)換,單引號這些危險的字符也會轉(zhuǎn)義了,不會再對庫造成威脅。當(dāng)然,這僅是一個示例而已,在真實的情況下,可能你還要對 Request.QueryStringu_id進行必要的檢測與分析,這樣才安全所以,使用參數(shù)化的sql語句,是一種很好的做法Dim sql As StringBuilder = New StringB

8、uilder() sql.Append() sql.Append(SELECT * FROM test) sql.Append( WHERE a= p1 ) Dim command As SqlCommand = dac.CreateCommand(sql.ToString() dac為自己寫的類 Dim param As SqlParameter = New SqlParameter() param .ParameterName = p1 param .SqlDbType = SqlDbType.NVarChar param .Value = b b為該函數(shù)的參數(shù)(ByVal b as St

9、ring) command .Parameters.Add(param) Dim reader As SqlDataReader = command.ExecuteReader()SqlParameter 構(gòu)造函數(shù)SqlParameter 構(gòu)造函數(shù) (String, SqlDbType, Int32, ParameterDirection, Byte, Byte, String, DataRowVersion, Boolean, Object, String, String, String)初始化 SqlParameter 類的一個新實例,該類使用參數(shù)名、參數(shù)的類型、參數(shù)的長度、方向、精度、小

10、數(shù)位數(shù)、源列名稱、DataRowVersion 值之一、用于源列映射的布爾值、SqlParameter 的值、此 XML 實例的架構(gòu)集合所在的數(shù)據(jù)庫的名稱、此 XML 實例的架構(gòu)集合所在的關(guān)系架構(gòu)以及此參數(shù)的架構(gòu)集合的名稱。命名空間: System.Data.SqlClient程序集: System.Data(在 system.data.dll 中)C#public SqlParameter ( string parameterName, SqlDbType dbType, int size, ParameterDirection direction, byte precision, byte

11、 scale, string sourceColumn, DataRowVersion sourceVersion, bool sourceColumnNullMapping, Object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName)參數(shù)parameterName要映射的參數(shù)的名稱。dbTypeSqlDbType 值之一。size參數(shù)的長度。directionParameterDirection 值之一。pre

12、cision要將 Value 解析為的小數(shù)點左右兩側(cè)的總位數(shù)。scale要將 Value 解析為的總小數(shù)位數(shù)。sourceColumn源列的名稱。sourceVersionDataRowVersion 值之一。sourceColumnNullMapping如果源列可為空,則為 true;如果不可為空,則為 false。value一個 Object,它是 SqlParameter 的值。xmlSchemaCollectionDatabase此 XML 實例的架構(gòu)集合所在的數(shù)據(jù)庫的名稱。xmlSchemaCollectionOwningSchema包含此 XML 實例的架構(gòu)集合的關(guān)系架構(gòu)。xmlS

13、chemaCollectionName此參數(shù)的架構(gòu)集合的名稱。備注如果未在 size 和 precision 參數(shù)中顯式設(shè)置 Size 和 Precision,則從 dbType 參數(shù)的值推斷出它們。SqlParameter 類表示 SqlCommand 的參數(shù),也可以是它到 DataSet 列的映射。無法繼承此類。有關(guān)此類型所有成員的列表,請參閱 SqlParameter 成員。System.Object System.MarshalByRefObject System.Data.SqlClient.SqlParameterVisual BasicNotInheritable Public

14、Class SqlParameter Inherits MarshalByRefObject Implements IDbDataParameter, IDataParameter, ICloneableC#public sealed class SqlParameter : MarshalByRefObject, IDbDataParameter, IDataParameter, ICloneableC+public _gc _sealed class SqlParameter : public MarshalByRefObject, IDbDataParameter, IDataParam

15、eter, ICloneableJScriptpublic class SqlParameter extends MarshalByRefObject implements IDbDataParameter, IDataParameter, ICloneable線程安全此類型的所有公共靜態(tài)(Visual Basic 中為 Shared)成員是線程安全的。但不保證任何實例成員是線程安全的。備注參數(shù)名稱不區(qū)分大小寫。示例Visual Basic, C#, C+ 下面的示例通過 SqlDataAdapter 中的 SqlParameterCollection 集合創(chuàng)建 SqlParameter 的多

16、個實例。這些參數(shù)用于從數(shù)據(jù)源中選擇數(shù)據(jù)并將數(shù)據(jù)放在 DataSet 中。此示例假定已經(jīng)用適當(dāng)?shù)募軜?gòu)、命令和連接創(chuàng)建了 DataSet 和 SqlDataAdapter。Visual BasicPublic Sub AddSqlParameters() . create myDataSet and myDataAdapter . myDataAdapter.SelectCommand.Parameters.Add(CategoryName, SqlDbType.VarChar, 80).Value = toasters myDataAdapter.SelectCommand.Parameters

17、.Add(SerialNum, SqlDbType.Int).Value = 239 myDataAdapter.Fill(myDataSet)End Sub AddSqlParametersC#public void AddSqlParameters()/ ./ create myDataSet and myDataAdapter/ . myDataAdapter.SelectCommand.Parameters.Add(CategoryName, SqlDbType.VarChar, 80).Value = toasters; myDataAdapter.SelectCommand.Par

18、ameters.Add(SerialNum, SqlDbType.Int).Value = 239; myDataAdapter.Fill(myDataSet);C+public:void AddSqlParameters()/ ./ create myDataSet and myDataAdapter/ . myDataAdapter-SelectCommand-Parameters-Add(SCategoryName, SqlDbType:VarChar, 80)-Value = Stoasters; myDataAdapter-SelectCommand-Parameters-Add(S

19、SerialNum, SqlDbType:Int)-Value = _box(239); myDataAdapter-Fill(myDataSet);JScript 沒有可用于 JScript 的示例。若要查看 Visual Basic、C# 或 C+ 示例,請單擊頁左上角的“語言篩選器”按鈕 。要求命名空間: System.Data.SqlClient平臺: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server

20、 2003 系列, .NET Framework 精簡版程序集: System.Data (在 System.Data.dll 中)使用SqlParameterSqlParameter p =SqlHelper.MakeInParam(EntryID,SqlDbType.Int,4,ev.EntryID),SqlHelper.MakeInParam(BlogID,SqlDbType.Int,4,ev.BlogID),SqlHelper.MakeInParam(URL,SqlDbType.NVarChar,255,DataHelper.CheckNull(ev.ReferralUrl),SqlH

21、elper.MakeInParam(IsWeb,SqlDbType.Bit,1,ev.PageViewType);SqlHelper.ExecuteNonQuery(conn,CommandType.StoredProcedure,blog_TrackEntry,p);答疑:SqlParameter賦值之后怎么添加值用SqlCommand我知道用add但我想問的是 SqlParameter例如SqlParameter parm = new SqlParameter(PARM_ORDER_ID, SqlDbType.Int);parm.Value = orderId;之后能不能再改parm添加一

22、個值因為我寫了個方法是傳遞SqlParameter類型的參數(shù)但有時要做些判斷像SqlParameter parm = new SqlParameter(PARM_ORDER_ID, SqlDbType.Int);parm.Value = orderId;if(.)/添加一個參數(shù)ExecuteReader(parm,.);請問應(yīng)該怎么做呢最佳答案 int IArticle.Insert(ArticleInfo article) /如果對象存在 if (article.ID != -1) return -1; else article.ID = TableHelper.GetSequence(SQ

23、LHelper.ConnectionString, Article, ID); /統(tǒng)計執(zhí)行成功的數(shù)量 int successCount = 0; string SQL_THIS = SQL_INSERT_ARTICLE; SqlParameter paras = GetParas(); paras0.Value = article.ID; paras1.Value = article.Title; paras2.Value = article.DateAdded; paras3.Value = article.Text; paras4.Value = article.SourceUrl; pa

24、ras5.Value = article.PostType; paras6.Value = article.Author; paras7.Value = article.Email; paras8.Value = article.SourceName; paras9.Value = article.BlogID; paras10.Value = article.CategoryID; paras11.Value = article.Summary; paras12.Value = article.IsBySummary; paras13.Value = article.DateUpdated;

25、 paras14.Value = article.TitleUrl; paras15.Value = article.FeedBackCount; paras16.Value = article.PostConfig; paras17.Value = article.EntryName; paras18.Value = article.KeyWord; SqlConnection conn = new SqlConnection(SQLHelper.ConnectionString); successCount = SQLHelper.ExecuteNonQuery(conn, CommandType.Text, SQL_THIS, paras); return successCount; 聲明:本帖轉(zhuǎn)自 /ang

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論