如何向access的“查询”传递参数

xiaotubie 2002-12-09 01:12:40
各位大侠:我用access做了一些“查询”,就象sqlserver的存储过程一样,有些是需要参数的,我用oledbcommand,其commandtype直接写成查询的名字,在vb.net中使用那些不需要参数的查询很正常,但现在要调用一些有参数的查询该怎么写?
...全文
369 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajex 2002-12-09
  • 打赏
  • 举报
回复
只能用索引指定吗?如
cmd.Parameters.Add("@jdzl", OleDbType.WChar, 50)
cmd.Parameters(0).Value = Query_JD
cmd.Parameters.Add("@jdzl", OleDbType.WChar, 50)
cmd.Parameters(1).Value =

ajex 2002-12-09
  • 打赏
  • 举报
回复
斑斧兄:
两个参数好像有一些问题吧.
select * from table1 where id=? and nick=?
指定参数值怎么指定呀?
xiaotubie 2002-12-09
  • 打赏
  • 举报
回复
To:班门斧、仙桃人:

我在其它的程序中确实使用“cmd.CommandType = CommandType.TableDirect”,就可以用的,但遇到这个就不行了。
后来比较了一下,原来无参数的被access视为视图,可以当表用,即“TableDirect”,有参数的被access视为存储过程,所以我把它改为

cmd.CommandType = CommandType.StoredProcedure,其余不变,就立刻OK了
,这可以我想出来的,别怪我不给分了,嘻嘻,但要谢谢你们的帮助
TheAres 2002-12-09
  • 打赏
  • 举报
回复
To xiaotubie(xiaotubie):
>>cmd.CommandType = CommandType.TableDirect
这句话怕是不可以吧,因为这样是指定用Table,而不是用你查询啊.
cmd.CommandType = CommandType.Text
试一试.

To;ajex(仙桃人)
多个参数一样,就是多加几句类似的:
cmd.Parameters.Add("@jdzl", OleDbType.WChar, 50)
cmd.Parameters(0).Value = Query_JD
xiaotubie 2002-12-09
  • 打赏
  • 举报
回复
多谢班斧、仙桃。
我试了一下,还是不行。我的方法是:
1:在access中建立一个“查询”,名称为“查询1”,内容大概如下
PARAMETERS jdzl Text ( 50 );
select * from table_a where col_id = jdzl;
如果用access立刻执行,需要在弹 出的窗口中输入一个参数,就可以得到查询结果。
2:在vb.net中
Private Sub Query(byval Query_JD as string)
Dim cmd As New OleDb.OleDbCommand()
cmd.CommandType = CommandType.TableDirect
cmd.CommandText = "查询1

cmd.Connection = OleDbConnection'已经建立好的一个连接对象
cmd.Parameters.Add("@jdzl", OleDbType.WChar, 50)
cmd.Parameters(0).Value = Query_JD

Dim adr As New OleDb.OleDbDataAdapter(cmd)
Dim ds As New DataSet()

adr.Fill(ds, "jdzl")
DataGrid1.DataSource = ds
DataGrid1.DataMember = "jdzl"
end sub

在运行时,还是提示“未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中”,依然不行呀。
ajex 2002-12-09
  • 打赏
  • 举报
回复
啊.嘿嘿.有这种事.又学到了一招.但是斑斧兄.如果有两个参数该怎么办呢?
TheAres 2002-12-09
  • 打赏
  • 举报
回复
SqlCommand和OleDbCommand 是有一些区别的,其中一个就是@和?.

楼上的例子是SqlCommand,用@id这种方式可以.在OleDbCommand中要用?来代替.(而且看起来有些象C#的语法).

下面是一个完整的例子:

Dim strConn, strSQL As String
strConn = ""; '填写你自己的连接字符串
Dim cn As New OleDbConnection(strConn)
cn.Open()
strSQL = "SELECT OrderID, CustomerID, EmployeeID, OrderDate " & _
"FROM Orders WHERE CustomerID = ?"
Dim cmd As New OleDbCommand(strSQL, cn)
cmd.Parameters.Add("@CustomerID", OleDbType.WChar, 5)
cmd.Parameters(0).Value = "ALFKI"
Dim rdr As OleDbDataReader = cmd.ExecuteReader()
ajex 2002-12-09
  • 打赏
  • 举报
回复
select * from table1 where id=@id
然后添加参数.并指定值.
OleDbCommand a;
a.Parameters.Add("@id",OleDbType.Char);
a.Parameters["@id"].Value ="你想要的值"

16,554

社区成员

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

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