您的位置:首页 > 编程语言 > Java开发

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

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

 

C#:

PreparedStatement   pstmt   =   con.prepareStatement("Insert into Spdj(Message,TypeCode) Values(?,?);
pstmt.setString(1,   "Hi");
pstmt.setInt(2,   2001);
pstmt.execute();


 

后补于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+"')";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql c# java sqlserver insert