请问ado参数化设置问题

aab_123456789 2021-02-24 09:58:42
cmd.CommandText = "select * from t_user where name=@nm and tt=@test";
cmd.Parameters.AddWithValue("@nm","admin");
cmd.Parameters.AddWithValue("@test","t1");
SqlDataReader dr = cmd.ExecuteReader();
可以换成这样么,设置参数互换顺序
cmd.CommandText = "select * from t_user where name=@nm and tt=@test";
cmd.Parameters.AddWithValue("@test","t1");
cmd.Parameters.AddWithValue("@nm","admin");
SqlDataReader dr = cmd.ExecuteReader();

为什么查询结果不一样,不是根据@后面的名称设置参数的么
...全文
359 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aab_123456789 2021-03-04
  • 打赏
  • 举报
回复
问题仍未解决,望老师指教。
aab_123456789 2021-02-26
  • 打赏
  • 举报
回复
引用 6 楼 qq_37254374 的回复:
Dim Para As DbParameter = cmd.CreateParameter Para.ParameterName = "@dt1" Para.DbType = DbType.DateTime Para.Value = CDate(d1) cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@dt2" Para.DbType = DbType.DateTime Para.Value = CDate(d2) cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@ID" Para.DbType = DbType.Int32 Para.Value = ID cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@type" Para.DbType = DbType.Int32 Para.Value = type cmd.Parameters.Add(Para) 我试了根本没影响,跟添加顺序无关,上面随便换位置查询结果不变
ado_cmd.CommandText = "select * from 检查结果 where t1=@t1 and t2=@t2" Dim para As OleDbParameter para = ado_cmd.CreateParameter para.ParameterName = "@t2" para.DbType = DbType.String para.Value = "2" ado_cmd.Parameters.Add(para) para = ado_cmd.CreateParameter para.ParameterName = "@t1" para.DbType = DbType.String para.Value = "1" ado_cmd.Parameters.Add(para) ado_cmd.ExecuteNonQuery() ado_reader = ado_cmd.ExecuteReader While ado_reader.Read MsgBox(ado_reader(5)) End While 按目标是想查询ado_cmd.CommandText = "select * from 检查结果 where t1='1' and t2='2'",然而查询的结果是ado_cmd.CommandText = "select * from 检查结果 where t1='2' and t2='1'"的结果
正怒月神 2021-02-25
  • 打赏
  • 举报
回复
不熟悉vb.net。 但是cmd.Parameters.AddWithValue 看起来有点奇怪 有没有cmd.Parameters.Add 方法?
qq_37254374 2021-02-25
  • 打赏
  • 举报
回复
Dim Para As DbParameter = cmd.CreateParameter Para.ParameterName = "@dt1" Para.DbType = DbType.DateTime Para.Value = CDate(d1) cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@dt2" Para.DbType = DbType.DateTime Para.Value = CDate(d2) cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@ID" Para.DbType = DbType.Int32 Para.Value = ID cmd.Parameters.Add(Para) Para = cmd.CreateParameter Para.ParameterName = "@type" Para.DbType = DbType.Int32 Para.Value = type cmd.Parameters.Add(Para) 我试了根本没影响,跟添加顺序无关,上面随便换位置查询结果不变
X-i-n 2021-02-25
  • 打赏
  • 举报
回复
用法没有错。只看你发出来的代码的话,不应该有这个问题。因为AddWithValue方法显式指定了所添加参数的参数名。无论参数添加的顺序如何,赋值一定只会赋到指定的参数上。 在cmd.CommandText = "select * from t_user where name=@nm and tt=@test"; 这句之后,紧跟着插入一句 cmd.Parameters.Clear(); 试试看。
aab_123456789 2021-02-25
  • 打赏
  • 举报
回复
引用 3 楼 X-i-n 的回复:
参数顺序正常不会影响查询结果。查询结果不一样体现在什么地方?把结果放上来看一下。
谢谢老师的回答 md.CommandText = "select * from t_user where name=@nm and tt=@test"; cmd.Parameters.AddWithValue("@nm","admin"); cmd.Parameters.AddWithValue("@test","t1"); SqlDataReader dr = cmd.ExecuteReader(); 可以换成这样么,设置参数互换顺序 cmd.CommandText = "select * from t_user where name=@nm and tt=@test"; cmd.Parameters.AddWithValue("@test","t1"); cmd.Parameters.AddWithValue("@nm","admin"); SqlDataReader dr = cmd.ExecuteReader(); 老师上面,两条查询,是互换了顺序,原本目标如nm"="admin",@test"="t1",以为上面条部分语句查询结果是一样的,然而,第一条等于md.CommandText = "select * from t_user where name='nm' and tt='t1'",第二条等于md.CommandText = "select * from t_user where name='t1' and tt='admin'",感觉是按照参数的顺序注入了sql查询语句中,请老师指教,哪里出错了,还是原本就是这样的用法
X-i-n 2021-02-25
  • 打赏
  • 举报
回复
参数顺序正常不会影响查询结果。查询结果不一样体现在什么地方?把结果放上来看一下。
aab_123456789 2021-02-25
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
不熟悉vb.net。 但是cmd.Parameters.AddWithValue 看起来有点奇怪 有没有cmd.Parameters.Add 方法?
老师,其他语言也行的

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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