parameters add(Parameters.Add和Parameters.AddWithValue有什么区别)
本文目录
- Parameters.Add和Parameters.AddWithValue有什么区别
- c#中Parameters.Add(,)
- C#的Parameters.Add
- c#中 cmd.parameters.add() 方法的问题
- C#编程:Parameters的Add方法的参数问题
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 参数的值推断出它们。
更多文章:

postgresql官方下载(python postgresql 哪个好)
2025年2月16日 09:40

python中while的用法(python里while循环的使用)
2025年3月21日 11:20

scrapy动态页面爬取(如何实现scrapy针对网页内容变化的增量爬取)
2025年4月6日 17:50

investing是什么意思(investing是什么意思)
2025年3月18日 05:00

make a difference to doing(make a difference to or in 有什么区别)
2025年3月6日 18:10

类似wordpress的建站系统(虚拟主机建站用哪个系统好,装了WordPress,什么内容都没有提醒主机空间耗尽)
2025年4月7日 04:20

java开发工程师是前端还是后端(前端网页和后端的java有啥区别呢)
2025年3月5日 04:40