vb.net - 不在 datagridview 中显示计数分类帐
问题描述
试图列出从 tally 到 odbc 的所有分类帐。一无所获。Mycode如下,执行时没有报错。但不将分类帐列表显示到 datagridview1
Try
Dim TalCon As OdbcConnection
TalCon = New OdbcConnection("DSN=TallyODBC_9000;PORT=9000;DRIVER=Tally ODBC Driver;SERVER={(local)}")
Dim Taldr As OdbcDataReader
Dim cmd As New OdbcCommand("SELECT $Name FROM Ledger")
TalCon.Open()
cmd.Connection = TalCon
Taldr = cmd.ExecuteReader()
While Taldr.Read
DataGridView1.DataSource = Taldr
End While
'displaying connection name to verify
TextBox1.Text = TalCon.ToString
Taldr.Close()
Catch ex As Exception
MsgBox("Master " & vbCrLf & ex.Message)
End Try
End Sub
解决方案
我很好奇您使用的数据库需要 ODBC 并且没有特定的提供程序。
我已将您的代码分为用户界面代码和数据库代码。这使得它更容易维护。
Connection、Command 和 DataReader 等数据库对象必须关闭并释放。Using...End Using
即使有错误,块也会处理这个问题。
您可以将CommandText
andConnection
直接传递给Command
.
更新用户界面时不要保持连接打开。相比之下,这是一个漫长的过程,并且太长而无法保持连接打开
这没有任何意义。您将DataSource
多次重置为相同的值。但是,它无论如何都不起作用,因为 DataReader 不是有效的DataSource
. 请参阅https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.datasource?view=netframework-4.8&f1url=%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk (System.Windows.Forms.DataGridView.DataSource)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%253Dv4.8)%3Bk(DevLang-VB)%26rd%3Dtrue#remarks
While Taldr.Read
DataGridView1.DataSource = Taldr
End While
如果您所做的Catch
只是显示一个消息框,请在用户界面中显示它。
Private ConStr As String = "DSN=TallyODBC_9000;PORT=9000;DRIVER=Tally ODBC Driver;SERVER={(local)}"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
DataGridView1.DataSource = GetNames()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Function GetNames() As DataTable
Dim dt As New DataTable
Using cn As New OdbcConnection(ConStr),
cmd As New OdbcCommand("SELECT $Name FROM Ledger", cn)
cn.Open()
Using reader = cmd.ExecuteReader
dt.Load(reader)
End Using
End Using
Return dt
End Function
推荐阅读
- docker - AlpineOS 上的 Nginx 配置命令
- excel - Excel 中的动态数组不会溢出
- java - Spring Hibernate 5.4.22.Final:javax.persistence.TransactionRequiredException:升级spring boot时没有事务正在进行
- node.js - MongooseError [MissingSchemaError]:尚未为模型“ModuleDetail”注册模式
- c++ - 获取用户输入并存储到具有自定义长度的数组中(C++)
- python - 如何使用 Python 过滤 Pandas 数据框中所有或部分行值大于 0 的列?
- r - 提取非特定名称表单字符串地址,忽略特定模式
- javascript - 使用 jQuery 向 grails 输入字段字段添加属性
- java - 使用 Java 向 Google 表格添加数据时出现 AuthenticationException 错误
- javascript - 鼠标悬停时仅显示当前卡片悬停效果