parameters add(Parameters.Add和Parameters.AddWithValue有什么区别)

2025-04-13 03:30:01 0

parameters add(Parameters.Add和Parameters.AddWithValue有什么区别)

本文目录

Parameters.Add和Parameters.AddWithValue有什么区别

参考1:所以我的做法是在能用AddWithValue的时候就用他paramNames:参数的数组 for (int i = 0; i 《 paramNames.Count; i++) { if (objParamValues); }

c#中Parameters.Add(,)

Add()将具有指定值的 DbParameter 项添加到 DbParameterCollection。 类似这样:parameter = new SqlParameter(“@name“,SqlDbType.VarChar,10); //定义SqlParameter对象,并指定类型 parameter.Value =txtName.Text; //赋值cmd.Parameters.Add(parameter); //填入SqlCommand

C#的Parameters.Add

C#应用程序与数据交互的时候只是对参数申明类型,然后传值,但是不会进行类型检查。而且传的时候都是用二进制传的,所以无论传的是什么类型的,最后都是二进制,而且在二进制中,数字3和字符3是一样的,数据库拿到这个东西后根据应用程序中申明的类型转换成相应的类型,这时如果转换不了就会出错。楼主举的例子那样写是没问题,但是假如那不是“0.2”,而是一个字母就会报错了。 另外再说说数据类型的问题,不同的程序语言对同一个类型的内存组织不是完全相同的,比如数据库的DbNull和C#中的Null就不是一回事了,更深一步的说是他们在内存中表达形式不一样。

c#中 cmd.parameters.add() 方法的问题

给命令添加参数呀。如果你没参数,当然可以不用了就是说,你SQL就如 “update table set a =1 “还不是 “update table set a=@a“这样的,就不用用

C#编程:Parameters的Add方法的参数问题

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

 1、直接写入法:

      例如:     

int Id =1;             string Name=“lui“;             cmd.CommandText=“insert into TUserLogin values(“+Id+“,’“+Name+“’)“;

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

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

     例如:

int Id =1;            string Name=“lui“;            cmd.CommandText=“insert into TUserLogin values(@Id,@Name)“;

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

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

   para.Value=Id;//给参数赋值           cmd.Parameters.Add(para);//必须把参数变量添加到命令对象中去。           //以下类似           para=new SqlParameter(“@Name“,SqlDbType.VarChar,16);           para.Value=Name;           com.Parameters.Add(para);

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

 SqlParameter用法

SqlParameter parameters = { new SqlParameter(“@a“, “a1“), new SqlParameter(“@b“, “b1“) };            string strReturn = ““;            StringBuilder strBulResult = new StringBuilder();            foreach (SqlParameter parameter in parameters)            {                strBulResult.Append(parameter.ParameterName);                strBulResult.Append(“:“);                strBulResult.Append(parameter.SqlValue);                 strBulResult.Append(“\n“);             }       strReturn = strBulResult.ToString();

SqlParameter用法

 

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

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

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

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

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

 

简单的给个示例

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

string sql=“select * from users where user_id=’“+Request.QueryString+“’“;

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

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

SqlCommand SqlCmd = new SqlCommand(sql, SqlConn);SqlParameter _userid = new SqlParameter(“uid“, SqlDbType.Int);_userid.Value = Request.QueryString;SqlCmd.Parameters.Add(_userid);

 

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

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

 

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

Dim sql As StringBuilder = New StringBuilder()            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为该函数的参数(ByVal b as String)            command .Parameters.Add(param)            Dim reader As SqlDataReader = 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#

public SqlParameter (    string parameterName,    SqlDbType dbType,    int size,    ParameterDirection direction,    byte precision,    byte scale,    string sourceColumn,    DataRowVersion sourceVersion,    bool sourceColumnNullMapping,    Object value,    string xmlSchemaCollectionDatabase,    string xmlSchemaCollectionOwningSchema,    string xmlSchemaCollectionName)

参数

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 参数的值推断出它们。

parameters add(Parameters.Add和Parameters.AddWithValue有什么区别)

本文编辑:admin

更多文章:


stdin是什么意思(stdin是什么意思)

stdin是什么意思(stdin是什么意思)

本文目录stdin是什么意思c语言:fflush(stdin)中的stdin是什么意思C语言中stdin流的用法是什么C语言中的stdin和stdout是什么是函数吗stdin是什么意思stdin However, both sort

2025年4月12日 03:00

tackle怎么读(block怎么读)

tackle怎么读(block怎么读)

本文目录block怎么读歌手林志炫卷珠帘英文部分怎么读block怎么读block 英 第三人称单数:blocks 复数:blocks 现在分词:blocking过去式:blocked 过去分词:blocked 英式:b洛克

2025年4月9日 01:50

license授权(license是什么意思)

license授权(license是什么意思)

本文目录license是什么意思手机请检查license授权怎样获得license的授权码license授权状态已激活是什么意思不撸帝发视频时告诉请检测License授权怎么处理license费用是什么意思手机license授权在哪里打开l

2025年2月13日 01:20

英语中or是什么意思?chorus在音乐中的意思是什么

英语中or是什么意思?chorus在音乐中的意思是什么

本文目录英语中or是什么意思chorus在音乐中的意思是什么net framework 3.5怎么安装求问会计中 reformulated financial statement 中文是什么意思python中为什么我的for循环里嵌套的if

2025年2月15日 12:00

防火墙的作用及其安全方案(什么是防火墙防火墙有什么作用)

防火墙的作用及其安全方案(什么是防火墙防火墙有什么作用)

本文目录什么是防火墙防火墙有什么作用什么是防火墙,作用是什么,怎么使用.电脑防火墙的主要作用是什么简述防火墙的作用防火墙有什么作用电脑防火墙有什么用什么是防火墙防火墙有什么作用摘要防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存

2025年2月23日 20:00

postgresql官方下载(python postgresql 哪个好)

postgresql官方下载(python postgresql 哪个好)

本文目录python postgresql 哪个好谁会用PostgreSQL怎样在centos中安装postgresqlwindows7怎么打开postgresqlpython postgresql 哪个好python操作数据库Postgr

2025年2月16日 09:40

mysql免费还是收费(MySQL的价格是多少)

mysql免费还是收费(MySQL的价格是多少)

本文目录MySQL的价格是多少mysql既然是免费的那为什么还要购买网站使用mysql是否要另外收费的mysql到底是不是免费的mysql for windows 免费吗mysql用于商业到底是不是免费的呀mysql要钱吗mysql是免费的

2025年3月2日 12:00

python中while的用法(python里while循环的使用)

python中while的用法(python里while循环的使用)

本文目录python里while循环的使用python中的while Ture有什么作用python里while循环的使用input输啥都是字符串。。。所以 isinstance()返回的都是false,而not false又导致while

2025年3月21日 11:20

任何的任意的英文(任意的的英语翻译 任意的用英语怎么说)

任何的任意的英文(任意的的英语翻译 任意的用英语怎么说)

本文目录任意的的英语翻译 任意的用英语怎么说“随意”英文怎么说三者或三者以上的“任何一个”的英语是什么任何用英文怎么说任何的英语单词怎样写“任何人”的英文是什么“随便”的英文怎么说任意的的英语翻译 任意的用英语怎么说任意的 每一个属性

2025年2月16日 00:50

平安银行信用卡客服电话(平安信用卡客服24小时热线)

平安银行信用卡客服电话(平安信用卡客服24小时热线)

本文目录平安信用卡客服24小时热线平安银行客服电话24小时人工服务平安银行信用卡中心电话是多少平安银行客服电话是多少平安信用卡客服24小时热线平安银行全国24小时服务热线为9551 1,信用卡全国24小时服务热线为95511转 2,持卡人拨

2025年4月11日 21:30

php是什么后缀(php后缀是什么文件)

php是什么后缀(php后缀是什么文件)

本文目录php后缀是什么文件后缀名为“PHP”的文件是什么文件后缀php是什么文件~呢php后缀是什么文件  以php后缀的文件,是php脚本文件。php是一种创建动态交互性站点的强有力的服务器端脚本语言。如果要或者打开的话,下载相应的器即

2025年4月4日 19:10

Web是什么?自然人电子税务局web端是什么意思

Web是什么?自然人电子税务局web端是什么意思

本文目录Web是什么自然人电子税务局web端是什么意思Web是什么Web即Web前端开发,是创建Web页面或app等前端界面呈现给用户的过程,通过HTML,CSS及JavaScript以及衍生出来的各种技术、框架、解决方案,来实现互联网产品

2025年3月31日 19:40

scrapy动态页面爬取(如何实现scrapy针对网页内容变化的增量爬取)

scrapy动态页面爬取(如何实现scrapy针对网页内容变化的增量爬取)

本文目录如何实现scrapy针对网页内容变化的增量爬取怎样使用scrapy爬取js动态生成的数据基于python的scrapy爬虫,关于增量爬取是怎么处理的scrapy怎么循环生成要爬取的页面urlpython 如何抓取动态页面内容爬虫小白

2025年4月6日 17:50

investing是什么意思(investing是什么意思)

investing是什么意思(investing是什么意思)

本文目录investing是什么意思Investing 是什么意思啊啊investing是什么意思investing投资双语对照词典结果:investingv.投资,花费( invest的现在分词 ); 授予; (把资金)投入; 投入(时间

2025年3月18日 05:00

make a difference to doing(make a difference to or in 有什么区别)

make a difference to doing(make a difference to or in 有什么区别)

本文目录make a difference to or in 有什么区别make a difference to do还是doing“Make a difference to doing sth”请问什么意思make a differenc

2025年3月6日 18:10

平安银行官网(平安银行积分兑换官网)

平安银行官网(平安银行积分兑换官网)

本文目录平安银行积分兑换官网怎样登录中国平安官方网站如何申请平安银行个人网上银行平安银行 登陆ip平安银行积分兑换官网平安信用卡积分商城可以兑换礼品或票券、充值话费及油卡以及使用积分+现金进行购物等,您可以登录平安口袋银行APP-信用卡-我

2025年3月14日 00:10

类似wordpress的建站系统(虚拟主机建站用哪个系统好,装了WordPress,什么内容都没有提醒主机空间耗尽)

类似wordpress的建站系统(虚拟主机建站用哪个系统好,装了WordPress,什么内容都没有提醒主机空间耗尽)

本文目录虚拟主机建站用哪个系统好,装了WordPress,什么内容都没有提醒主机空间耗尽wordpress建站流程有哪些虚拟主机建站用哪个系统好,装了WordPress,什么内容都没有提醒主机空间耗尽想要建立一个个人网站很容易,但想要让网站

2025年4月7日 04:20

语c怎么玩初学者(语c如何玩好)

语c怎么玩初学者(语c如何玩好)

本文目录语c如何玩好学习C语言一个月了,感觉看书都会,但是让自己写代码完全不知道如何下手怎么办语c如何玩好c语言入门很简单,但是想更深入的话,你的基础知识就必须要好了,比如:数学知识,数据结构,英语知识,逻辑思维等等都要比别人强很多才能打好

2025年2月13日 06:10

ip地址怎么看(怎么看ip地址是哪里的)

ip地址怎么看(怎么看ip地址是哪里的)

本文目录怎么看ip地址是哪里的电脑ip地址怎么看计算机ip地址怎么查看怎么看ip地址是哪里的  电脑的IP地址有两种,一种查看本机在局域网里的IP地址,第二种是查看电脑在当前互联网中的IP地址。前者可以在键盘上按【Windows+R】组合键

2025年3月3日 00:10

java开发工程师是前端还是后端(前端网页和后端的java有啥区别呢)

java开发工程师是前端还是后端(前端网页和后端的java有啥区别呢)

本文目录前端网页和后端的java有啥区别呢Java开发工程师,在企业中需要编写前端页面吗java后端开发工程师是什么职位Java后台开发和前端开发,哪个比较好前端网页和后端的java有啥区别呢web前端分为网页设计师、网页美工、web前端开

2025年3月5日 04:40

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:19
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:7
标签列表

热门搜索