sql-server - VBA SQL Server查询连接但不返回记录
问题描述
我有这个 VBA 代码,它在连接成功后发出 SQL Server 查询,但查询不返回任何记录(例如,-1)
Function invested_funds() As Integer
Dim c As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connectionstring As String
Dim sql As String
connectionstring = "Provider=SQLOLEDB;Data Source=DESKTOP-2TTG3GQ\SQLEXPRESS;" & _
"Initial Catalog=DB;" & _
"Integrated Security=SSPI;"
Set c = New ADODB.Connection
Set rs = New ADODB.Recordset
c.Open connectionstring
sql = "select [DB].[dbo].[db].[CSRoot] " & _
"from [DB].[dbo].[db] "
If c.State = adStateOpen Then
Debug.Print ("Connected") 'This prints!
End If
Set rs = c.Execute(sql)
Debug.Print (rs.RecordCount)
invested_funds = CInt(rs.RecordCount)
End Function
但是,我知道记录存在,并且 SSMS 中完全相同的查询确实返回记录
select [DB].[dbo].[db].[CSRoot]
from [DB].[dbo].[db]
事实上,许多记录。
怎么会这样?
解决方案
您可以使用 rs.getRows 函数获取记录数。
Function invested_funds() As Integer
Dim c As ADODB.Connection
Dim rs As ADODB.Recordset
Dim connectionstring As String
Dim sql As String
connectionstring = "Provider=SQLOLEDB;Data Source=DESKTOP-2TTG3GQ\SQLEXPRESS;" & _
"Initial Catalog=DB;" & _
"Integrated Security=SSPI;"
Set c = New ADODB.Connection
Set rs = New ADODB.Recordset
c.Open connectionstring
sql = "select [DB].[dbo].[db].[CSRoot] " & _
"from [DB].[dbo].[db] "
If c.State = adStateOpen Then
Debug.Print ("Connected") 'This prints!
End If
Set rs = c.Execute(sql)
Dim arr As Variant, n As Integer
arr = rs.GetRows
n = UBound(arr, 2) + 1
'Debug.Print (rs.RecordCount)
Debug.Print n
invested_funds = n
End Function
推荐阅读
- c++ - 尝试使用 extern "C" 在 C 中调用 C++ 方法,得到“未定义引用”对象的链接器错误
- c++ - 如何在 C++ 中从另一个协程调用协程?
- javascript - 如何从平铺地图编辑器获取数据到我的 javascript 文件?
- java - 在 Hbase Java 中验证删除
- html - 使用 CSS/HTML 让点击事件一次性工作的方法
- docker - Nginx uwsgi_pass 不能使用除 / 以外的任何位置设置
- javascript - Highcharts yAxis如何在yAxis上的小数点值时获得更多高度
- jenkins - groovy.lang.MissingPropertyException:没有这样的属性:类开始:WorkflowScript
- babeljs - 带有 Babel 的 Webpack 编译正常,但我得到 Uncaught ReferenceError: require is not defined
- javascript - Microsoft Graph API 附件处理