java、C#中Sql语句传参的写法及意义

来源:互联网 发布:淘宝密令怎么得 编辑:程序博客网 时间:2024/05/17 22:30

 Sqlserver这东西没少跟他打交道,刚学开发语言时就已经跟他接触了,不要说很精通,但就语法还算是熟悉,但现在开始写C#,发现很C#多了一种SqlServer的参数传入方式,以往我们常常对要传参的Sql语句都是直接通过拼凑Sql语句的方式来实现,但现在C#为什么要专门做一个Sql参数的类来实现呢,经过查找才知道,这样做是有道理的,一是可以优化SQL语句(在oracle的教程的类似的传参SQL语句是只会预编译一次,无论传入多少次参数,都只编译一次,这样是可以优化同一SQL语句频繁使用的情况,SQLSERVER中不知道有没这方面的优化,Sqlserver的存储过程只要有传入参,是不会一次编译的是多次编译......),二是可以检查传入参的数据类型,过滤非法字符...这样可以有效阻止SQL的注入式破解.具体写法如下.

 

C#:

java:

 

后补于2013/08/15:

最近由于服务器不支持SqlConnection,又没法打补丁,所以使用OdbcConnection来进行连接数据库的操作,但在应用传参语句时出现如下问题:

语句:

string jsry = dr1["Ryzd_Ry_F"].ToString().Trim();       //接收人员sqlse1 = "Insert Into Alarm_Bjxxb(Type_F,Ryzd_Js_F,SendTime_F,Content_F,DisPlay_F,Bz_F,LinkKey_F)"       +" values('客户证照近效期',@p1,getDate(),@p2,'1','','"+serName+"')";sqlCmd = new OdbcCommand(sqlse1, conn);OdbcParameter par1 = new OdbcParameter("@p1", jsry);sqlCmd.Parameters.Add(par1);OdbcParameter par2 = new OdbcParameter("@p2", xmlString);sqlCmd.Parameters.Add(par2);sqlCmd.ExecuteNonQuery();

执行时错误提示如下:

[SQL Server] 必须声名变量 @p1
苦找了N久最后在网上发现,要把@p1,@p2改为?后才可正常执行,晕啊!

修改后Sqlse1如下:

sqlse1 = "Insert Into Alarm_Bjxxb(Type_F,Ryzd_Js_F,SendTime_F,Content_F,DisPlay_F,Bz_F,LinkKey_F)" +" values('客户证照近效期',?,getDate(),?,'1','','"+serName+"')";

原创粉丝点击