C# 中SqlParameter类的使用方法小结.docx

上传人:b****3 文档编号:2168566 上传时间:2022-10-27 格式:DOCX 页数:13 大小:19.51KB
下载 相关 举报
C# 中SqlParameter类的使用方法小结.docx_第1页
第1页 / 共13页
C# 中SqlParameter类的使用方法小结.docx_第2页
第2页 / 共13页
C# 中SqlParameter类的使用方法小结.docx_第3页
第3页 / 共13页
C# 中SqlParameter类的使用方法小结.docx_第4页
第4页 / 共13页
C# 中SqlParameter类的使用方法小结.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C# 中SqlParameter类的使用方法小结.docx

《C# 中SqlParameter类的使用方法小结.docx》由会员分享,可在线阅读,更多相关《C# 中SqlParameter类的使用方法小结.docx(13页珍藏版)》请在冰豆网上搜索。

C# 中SqlParameter类的使用方法小结.docx

C#中SqlParameter类的使用方法小结

C#中SqlParameter类的使用方法小结

在c#中执行sql语句时传递参数的小经验

 1、直接写入法:

     例如:

            intId=1;

            stringName="lui";

            cmd.CommandText="insertintoTUserLoginvalues("+Id+",'"+Name+"')";

       因为Id是数值,所以在传递的时候只需要在sql字符串中用"+Id+"即可实现,而  Name是字符串,所以在传递的时候还需要在"+Name+"两边各加一个单引号(')来实现;

 

 

2、给命令对象添加参数法:

    例如:

           intId=1;

           stringName="lui";

           cmd.CommandText="insertintoTUserLoginvalues(@Id,@Name)";

         //上条语句中直接在sql语句中写添加的参数名,不论参数类型都是如此.

          SqlParameter para=newSqlParameter("@Id",SqlDbType.int,4);//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同

          para.Value=Id;//给参数赋值

          cmd.Parameters.Add(para);//必须把参数变量添加到命令对象中去。

          //以下类似

          para=newSqlParameter("@Name",SqlDbType.VarChar,16);

          para.Value=Name;

          com.Parameters.Add(para);

       ...然后就可以执行数据库操作了。

 

声明:

本帖转自

 

在此对本帖原创作者,致以最诚挚的谢意!

 

 

=============================================

 

 SqlParameter用法

SqlParameter[]parameters={newSqlParameter("@a","a1"),newSqlParameter("@b","b1")};

 

           stringstrReturn="";

 

           StringBuilderstrBulResult=newStringBuilder();

 

 

 

           foreach(SqlParameterparameterinparameters)

 

           {

 

               strBulResult.Append(parameter.ParameterName);

 

               strBulResult.Append(":

");

 

               strBulResult.Append(parameter.SqlValue);

 

               strBulResult.Append("\n");

 

           }

 

 

 

           strReturn=strBulResult.ToString();

 

 

声明:

本帖转自

 

在此对本帖原创作者,致以最诚挚的谢意!

 

 

=============================================

 

 

SqlParameter用法

 

 关于Sql注入的基本概念,相信不需多说,大家都清楚,经典的注入语句是'or1=1--

单引号而截断字符串,“or1=1”的永真式的出现使得表的一些信息被暴露出来,如果sql语句是select*from的话,可能你整个表的信息都会被读取到,更严重的是,如果恶意使用都使用drop命令,那么可能你的整个数据库得全线崩溃。

 

 

当然,现在重点不是讲sql注入的害处,而是说说如何最大限度的避免注入问题。

 

 sql注入的存在在最大危害,是sql的执行语句没有和控制语句分开,我们想要select一些东西,但用户可能拼出'or1=1甚至再加上delete/update/drop,后来是属于控制语句了,所以要避免sql的注入,就必须把查询语句与控制语句分开。

 

SqlParameter给我们提供了一个很好的类,有了它,我们可以不现拼接字符串,也可以不再担心单引号带来的惨剧,因为,这一切会有人来为我们完成的。

 

简单的给个示例

 

传统的查询语句的sql可能为

stringsql="select*fromuserswhereuser_id='"+Request.QueryString["uid"]+"'";

很显然,我们在这里拼接了字符串,这就给sql注入留下了可乘之机。

 

现在,我们要改写这样的语句,使用SqlParameter来做

 

SqlCommandSqlCmd=newSqlCommand(sql,SqlConn);

SqlParameter_userid=newSqlParameter("uid",SqlDbType.Int);

_userid.Value=Request.QueryString["u_id"];

SqlCmd.Parameters.Add(_userid);

 

这样,我们可以保证外接参数能被正确的转换,单引号这些危险的字符也会转义了,不会再对库造成威胁。

 

当然,这仅是一个示例而已,在真实的情况下,可能你还要对Request.QueryString["u_id"]进行必要的检测与分析,这样才安全

 

所以,使用参数化的sql语句,是一种很好的做法

 

 

 

DimsqlAsStringBuilder=NewStringBuilder()

           sql.Append("")

           sql.Append("SELECT*FROMtest")

           sql.Append("WHERE a=@p1")           

 

           DimcommandAsSqlCommand   =   dac.CreateCommand(sql.ToString()) 'dac为自己写的类

           DimparamAsSqlParameter=NewSqlParameter()

           param.ParameterName="@p1"

           param.SqlDbType=SqlDbType.NVarChar

           param.Value=b      'b为该函数的参数(ByValbasString)

           command.Parameters.Add(param)

           DimreaderAsSqlDataReader=command.ExecuteReader()

 

 

 

 

 

SqlParameter构造函数

 

SqlParameter构造函数(String,SqlDbType,Int32,ParameterDirection,Byte,Byte,String,DataRowVersion,Boolean,Object,String,String,String)

初始化SqlParameter类的一个新实例,该类使用参数名、参数的类型、参数的长度、方向、精度、小数位数、源列名称、DataRowVersion值之一、用于源列映射的布尔值、SqlParameter的值、此XML实例的架构集合所在的数据库的名称、此XML实例的架构集合所在的关系架构以及此参数的架构集合的名称。

命名空间:

System.Data.SqlClient

程序集:

System.Data(在system.data.dll中)

 

C#

publicSqlParameter(

   stringparameterName,

   SqlDbTypedbType,

   intsize,

   ParameterDirectiondirection,

   byteprecision,

   bytescale,

   stringsourceColumn,

   DataRowVersionsourceVersion,

   boolsourceColumnNullMapping,

   Objectvalue,

   stringxmlSchemaCollectionDatabase,

   stringxmlSchemaCollectionOwningSchema,

   stringxmlSchemaCollectionName

 

 

参数

parameterName

要映射的参数的名称。

 

dbType

SqlDbType值之一。

 

size

参数的长度。

 

direction

ParameterDirection值之一。

 

precision

要将Value解析为的小数点左右两侧的总位数。

 

scale

要将Value解析为的总小数位数。

 

sourceColumn

源列的名称。

 

sourceVersion

DataRowVersion值之一。

 

sourceColumnNullMapping

如果源列可为空,则为true;如果不可为空,则为false。

 

value

一个Object,它是SqlParameter的值。

 

xmlSchemaCollectionDatabase

此XML实例的架构集合所在的数据库的名称。

 

xmlSchemaCollectionOwningSchema

包含此XML实例的架构集合的关系架构。

 

xmlSchemaCollectionName

此参数的架构集合的名称。

 

 备注

如果未在size和precision参数中显式设置Size和Precision,则从dbType参数的值推断出它们。

 

SqlParameter类

表示SqlCommand的参数,也可以是它到DataSet列的映射。

无法继承此类。

 

有关此类型所有成员的列表,请参阅SqlParameter成员。

 

System.Object

  System.MarshalByRefObject

     S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1