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

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如何才能被替换呢?
...全文
115 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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有参数
所以你不用担心

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧