首页 新闻 会员 周边

带参数的sql语句执行中出现 “必须声明标量变量@id” 错误原因分析

1
悬赏园豆:50 [已解决问题] 解决于 2009-04-08 10:31

我的程序通过前页的querystring传递过来一个id值,根据这个id值来查询数据库,结果出现标题所示错误。代码如下:

Code

 我估计问题出来实例化adapter这里,如果加上 adapter.SelectCommand = selectCMD;这句则没有问题。或者将SqlDataAdapter adapter = new SqlDataAdapter(selectCMD.CommandText,conn.ConnectionString);
改为SqlDataAdapter adapter
= new SqlDataAdapter(selectCMD)也没问题.

我只是不理解实例化SqlDataAdapter的时候第一个参数不就是SelectCommand的CommandText吗?为什么会出现这种问题呢?望高手指点

BYF_WJ的主页 BYF_WJ | 初学一级 | 园豆:140
提问于:2009-04-07 21:14
< >
分享
最佳答案
0

SqlDataAdapter adapter = new SqlDataAdapter(selectCMD.CommandText,conn.ConnectionString);

你传给Adapter的是 "SELECT * FROM tbTest WHERE id =@id " 你并没有给Adapter传入@id对应的参数值。
如果你把整个selectCMD对象传给Adapter,这时候就是带上参数值的了。
Azuresong | 老鸟四级 |园豆:3565 | 2009-04-08 00:28
其他回答(3)
0

在ADO.NET,要先实例化适配器(SqlDataAdapter)才能执行的吧.

aito | 园豆:170 (初学一级) | 2009-04-07 21:26
0

please give us the complete error message,

and i guess you didn't open the DB Connection, like this:
conn.Open();

or try this:

SqlDataAdapter adapter = new SqlDataAdapter(selectCMD.CommandText, conn);

WizardWu | 园豆:1402 (小虾三级) | 2009-04-07 23:46
0

 selectCMD.Parameters.Add("@id", SqlDbType.Int, 4);
        selectCMD.Parameters[
0].Value = Request.QueryString["id"];
你的这个写法不对.用这种参数的写法不是这样的,

 SqlDataAdapter adapter = new SqlDataAdapter(selectCMD.CommandText,conn.ConnectionString);

selectCMD.CommandText=“SELECT * FROM tbTest WHERE id =@id ";它并没有你想象的那样,把@id转换成了值。所以这个语句在数据库中执行,会发现不明的参数@id。

selectCMD.connect=conn;//链接

SqlDataAdapter adapter = new SqlDataAdapter(selectCMD);

这样就ok了


邢少 | 园豆:10926 (专家六级) | 2009-04-08 08:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册