以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]同一个存储过程,直接执行与项目中调用得出的结果不一致?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=161052)

--  作者:无我是天机
--  发布时间:2021/3/4 11:53:00
--  [求助]同一个存储过程,直接执行与项目中调用得出的结果不一致?
请教一下各位老师:我写了一个存储过程(SQL SERVER 2016),数据库中直接执行是有记录返回的但是项目中调用时没有记录返回也没错误提示?谢谢!(论坛发帖好像无法直接贴代码,我上传了代码截图)

图片点击可在新窗口打开查看此主题相关图片如下:代码1.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:代码2.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:代码3.jpg
图片点击可在新窗口打开查看



--  作者:有点蓝
--  发布时间:2021/3/4 12:10:00
--  
看不出什么问题。

temp_pjcom是一个临时表?

--  作者:无我是天机
--  发布时间:2021/3/4 12:21:00
--  
不是,正常的表
--  作者:有点蓝
--  发布时间:2021/3/4 13:34:00
--  
导出部分表格数据和代码发上来测试一下
--  作者:无我是天机
--  发布时间:2021/3/4 15:50:00
--  
数据已上传
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test.rar


--  作者:有点蓝
--  发布时间:2021/3/4 16:45:00
--  
测试了一下,应该是一个bug,存储过程如果有插入或者更新的代码,cmd.ExecuteReader无法返回表格数据 。

已反馈

--  作者:无我是天机
--  发布时间:2021/3/4 17:19:00
--  
谢谢蓝老师。
--  作者:有点蓝
--  发布时间:2021/3/5 9:22:00
--  
开发人员经过详细测试,确定这个是.net的oledb驱动自身的bug,暂时没有办法处理。

目前解决方法是:
1、分2步,把返回表格数据的sql提取出来,另外执行,也就是先执行存储过程更改数据,在另外执行sql返回表格数据
2、使用其它.net数据库驱动处理,比如:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=159738&replyID=&skin=1,测试代码

Dim db = HySql.DataBaseFactory.CreateDatabase()     
Dim dt As System.Data.DataTable = db.ExecuteDataSet(System.Data.CommandType.StoredProcedure, "p_F_AUTHNS",HySql.ParameterPair.GetPair("BUSERID", "1234567")).Tables(0)      

MessageBox.show("Count=" & dt.Rows.Count)
If dt.rows.count > 0 Then 
    \'MessageBox.Show("kk")
    Tables("fr_test_Tblselect").DataSource = dt
Else
    \'MessageBox.Show("123")
End If

--  作者:无我是天机
--  发布时间:2021/3/5 12:03:00
--  
蓝老师,如果我采用第二种方案,是不是项目中所有调用SQL语句的代码都要按照新语法进行修改?还是说仅仅在调用有插入、更新的存储过程的地方用新语法就行?
--  作者:有点蓝
--  发布时间:2021/3/5 12:10:00
--  
在调用有插入、更新的存储过程的地方用新语法就行。其实我更建议使用第一种方法,多访问一次数据库而已