以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]调用access的存储过程 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=160912) |
-- 作者:chnfo -- 发布时间:2021/2/26 7:01:00 -- [求助]调用access的存储过程 使用的外部数据源access作为数据库,本来access是没有存储过程的,CSDN将之定义为查询,也可以参数化调用 CSDN网帖地址:https://blog.csdn.net/zyjq52uys/article/details/88576853 但其用法与帮助里的存储过程不一样。 如果按这个帖的用法,狐表调用方法应当怎么用呢? 如何在狐表的命令窗口测试下述的存储过程? Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\XYZ$\\MyData.mdb;Persist Security Info=False") \'-----这里就直接报错了,提示未定义类型OleDb.OleDbConnection,后面的就没法试了 \'打开数据库 conn.Open() \'生成命令 Dim cmd As New OleDbCommand() cmd.CommandType = CommandType.StoredProcedure \'设置使用存储过程 cmd.Connection = conn cmd.CommandText = "StoredProcedureWithParameters" \'存储过(查询对象)的名称 cmd.Parameters.Add("@cityer", OleDbType.VarChar, 5).Value = "物主" cmd.Parameters.Add("@cityerr", OleDbType.VarChar, 10).Value = "天津" \'执行命令 Dim adapter As New OleDbDataAdapter() adapter.SelectCommand = cmd \'填充DataTable Dim dt As New DataTable adapter.Fill(dt) DataGridView1.DataSource = dt \'关闭数据库 conn.Close() |
-- 作者:有点蓝 -- 发布时间:2021/2/26 8:53:00 -- 首先access不存在存储过程这种东西,查询不是存储过程,类似SQL server的视图。和普通sql一样使用即可:http://www.foxtable.com/webhelp/topics/3266.htm Dim cmd As new SQLCommand
cmd.ConnectionName = "数据源名称" cmd.CommandText = "SELECT * FROM 某查询名称 WHERE 日期 >= ? AND 日期 <= ?" cmd.Parameters.Add("@开始日期",#2/1/2018#) cmd.Parameters.Add("@结束日期",#3/31/2018#) Dim dt As DataTable = cmd.ExecuteReader() |
-- 作者:chnfo -- 发布时间:2021/2/26 9:49:00 -- 在命令窗口执行报错哦。提示:至少一个参数没有指定值。外部查询表名加不加大括号都不行。我在外部数据源定义了一个查询表X:sel.ect *from 订单 where 客户 = kh and 日期 = Rq . 然后text= se.lect * from x where 客户=? And rq =?” [此贴子已经被作者于2021/2/26 9:55:35编辑过]
|
-- 作者:chnfo -- 发布时间:2021/2/26 9:59:00 -- 查询表不能传参数?那查询表好大的哟,耗时太长了。我是想传参在access中查 |
-- 作者:有点蓝 -- 发布时间:2021/2/26 10:11:00 -- 肯定可以,请贴出完整代码 |
-- 作者:chnfo -- 发布时间:2021/2/26 10:22:00 -- 比如外部数据源连接名为“CS”,其中有一个查询表XYZ,它的查询语句是 sel.ect * from TbAAA where xid = strm and yid = strn \'\'\'这里的strm和strn就是需要外部引入的参数 Dim cmd As new SQLCommand cmd.ConnectionName = "CS" cmd.CommandText = "SEL.ECT * FROM XYZ WHERE xid = ? and yid = ?" cmd.Parameters.Add("@xid","aaaaa") cmd.Parameters.Add("@yid","bbbbb") Dim dt As DataTable = cmd.ExecuteReader() 这样执行肯定是报错的。 但如果把查询表XYZ的语句换成 sel.ect * from TbAAA,就没问题。 |
-- 作者:有点蓝 -- 发布时间:2021/2/26 10:25:00 -- 查询表XYZ的语句本来就应该是: select * from TbAAA where xid = strm and yid = strn这个没有任何意义,本来就是在代码里传入的:WHERE xid = ? and yid = ?
|
-- 作者:chnfo -- 发布时间:2021/2/26 10:28:00 -- 但如果多表查询的时候,还有一些join之类的,按理说,每个表先按条件过滤再join,似乎效率要高一些。 如果把查询条件放在外面,效率可能会降低,那用查询视图就没太大价值了,还不如直接SQL 所以,数据量大的时候,要么换数据库;要么直接用SQL语句?
[此贴子已经被作者于2021/2/26 10:28:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/2/26 10:38:00 -- 把查询和视图看作是一个表来理解就行了,表格可以在数据库添加条件的吗?如果还不理解,建议百度一下。查询本身是不存储数据的,简单的可以理解为是包装了一段SQL的代理工具,调用的时候才会有查询效率的问题,如果查询条件需要外部传入,就只能放到外面。外面传入的条件一样可以影响查询本身的效率。 当然,如果可以建议使用sqlserver,毕竟sqlserver对视图功能进行了一定的优化,已经提前对里面的sql进行了编译,相对执行普通sql会更快一点
|