• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

送分拉~~~~~问个参数问题

tco9999 2004-12-02 04:25:35
private void Button1_Click(object sender, System.EventArgs e)
{
string con="Provider=sqloledb;database=BBS_base;server=localhost;uid=sa";
string sql="select * from dic_jg where jgname=@jgname";

OleDbConnection conn=new OleDbConnection(con);
OleDbCommand dc=new OleDbCommand(sql,conn);
dc.CommandType=CommandType.Text;

dc.Parameters.Add(new OleDbParameter("@jgname",OleDbType.VarChar,20));

dc.Parameters["@jgname"].Value="阿爸啊啊啊啊";
Response.Write(dc.CommandText);


}

为什么运行之后还是select * from dic_jg where jgname=@jgname,这个@jgname如何才能被替换呢?
...全文
94 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaodao2008 2004-12-02
分多就是热闹!!
回复
spgoal 2004-12-02
dc.Parameters.Add(new OleDbParameter("@jgname",OleDbType.VarChar,20));
这句就是替换的前提
回复
tco9999 2004-12-02
现在没测试环境,先结了再说
回复
Study_Now 2004-12-02
给个能成功运行的一段代码供你参考:



OleDbConnection conn;
OleDbCommand cmd;
conn = new OleDbConnection(connStr);
conn.Open();
updateCmd = "UPDATE person Set grade=@a Where id=@id";
cmd = new OleDbCommand(updateCmd, conn);

try
{
cmd.Parameters.Add(new OleDbParameter("@a", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@id",OleDbType.SmallInt,2));
cmd.Parameters["@id"].Value=DataGrid1.DataKeys[(int)e.Item.ItemIndex];
cmd.Parameters["@a"].Value = newGrade.SelectedItem.ToString();
cmd.ExecuteNonQuery();
Response.Write("<script>alert('授权成功!');</script>");
}
catch
{
Response.Write("<script>alert('授权失败!');</script>");
}

conn.Close();
回复
tco9999 2004-12-02
但是出错亚,就说@jgname是未声明的变量。
我只是想多了解一种方法而已嘛
回复
37350792 2004-12-02
你如果构造语句的话:
string sql="select * from dic_jg where jgname='阿爸啊啊啊啊'";

不就OK了!
回复
37350792 2004-12-02
对啊!没错,你是response.write () 是将它的Text属性写出来!

如果你执行的话
dc.excuteReader() 数据集就到DataReader对象下去了!
回复
tco9999 2004-12-02
但就算我dc.connection.open();
datagrid.datasource=dc.excu..reader();
databind();
他就说@jgname是未声明的变量,
我只是想用参数法来构造查询,好像这样能避免注入攻击,书上的例子和我写的也差不多,为啥我就搞不定呢,太菜了,大伙别见笑阿
回复
chenyuming2004 2004-12-02
dc.CommandText当然是select * from dic_jg where jgname=@jgname
参数替换是在你执行时发送到数据库服务器上,才被完成的。
回复
brightheroes 2004-12-02
需要指出的是
dc.Parameters["@jgname"].Value="阿爸啊啊啊啊";
不过是给对应的参数赋上了值
并没有去替换你的SQL
command.一系列的Execute方法的内部,才会根据参数的类型来进行替换
你不用关心这个
回复
wangxiaohu 2004-12-02
你的sql语句本来就是“.......where jgname=@jgname”啊
程序不可能知道你的@jgname是参数啊
你可以建立一个存储过程
只能想存储过程传递参数的
回复
goody9807 2004-12-02
dc.Parameters["@jgname"].Value="阿爸啊啊啊啊";
这时替换的
回复
脆弱的肠胃 2004-12-02
添加参数语句放在打开连接之前,试一下
回复
brightheroes 2004-12-02
运行之后是这个
但是这个Command有参数
所以你不用担心
回复
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-12-02 04:25
社区公告
暂无公告