Sql server 如何使用VB.NET在不在本地范围内的类级连接上声明连接对象?

Sql server 如何使用VB.NET在不在本地范围内的类级连接上声明连接对象?,sql-server,vb.net,Sql Server,Vb.net,我得到了一个错误: Fill:SelectCommand。尚未初始化连接属性 我想这是因为我不是在私有子类中声明数据集,而是在公共类中声明数据集。。。。。 但在程序中,我需要在不同的专用子系统中多次使用数据集…我应该如何定义它? 非常感谢 Imports System.Data Imports System.Data.SqlClient Public Class Form1 Dim con As SqlConnection Dim strsql As String Dim da As New S

我得到了一个错误:

Fill:SelectCommand。尚未初始化连接属性

我想这是因为我不是在
私有子类中声明数据集,而是在
公共类中声明数据集。。。。。
但在程序中,我需要在不同的
专用子系统中多次使用数据集…我应该如何定义它?
非常感谢

Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Dim con As SqlConnection
Dim strsql As String
Dim da As New SqlDataAdapter(strsql, con)
Dim ds As New DataSet()
Dim strcon As String
Dim newmode As Boolean
Dim newrow As DataRow
Dim cb As SqlCommandBuilder

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    newmode = False
    'Dim con As SqlConnection
    'Dim strsql As String
    con = New SqlConnection("initial catalog=test;data source=nazi;integrated security=sspi;")
    strsql = "select*from table_1"
    con.Open()
    'Dim da As New SqlDataAdapter(strsql, con)
    'Dim ds As New DataSet()

    da.Fill(ds, "dd")

    TextBox1.DataBindings.Add(New Binding("text", ds, "dd.tel"))
    TextBox2.DataBindings.Add(New Binding("text", ds, "dd.nam"))
    TextBox3.DataBindings.Add(New Binding("text", ds, "dd.address"))
    da.update(ds, "dd")
    con.Close()
End Sub

Private Sub empty()
    textrecord.text = ""
    TextBox1.text = ""
    TextBox2.text = ""
    TextBox3.text = ""
    TextBox4.text = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    newrow = ds.Tables("dd").NewRow
    newmode = True
    textrecord.BackColor = Color.Red
    textrecord.Text = "new record"
    MsgBox("enter new record and press save")
    Call empty()
End Sub

End Class
而不是:

Dim con As SqlConnection
尝试添加新的

Dim con As New SqlConnection("initial catalog=test;...")

但是,最好的做法是只在需要连接之前打开连接,然后立即关闭。连接应该是局部变量,而不是类变量

在这一行中创建全局级别的DataAdapter

Dim da As New SqlDataAdapter(strsql, con) 
但是此时您的strsql是空的,如果您随后更改它,它在dataadatpter中不会更改,因此会显示错误消息

如果您坚持保留所有全局变量(正如@Andomar在is answer中指出的那样,这被认为是一种不好的做法),那么您应该确保在使用DataAdapter之前使用正确的sqlstring创建DataAdapter:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     
    newmode = False     
    con = New SqlConnection("initial catalog=test;data source=nazi;integrated security=sspi;") 
    strsql = "select*from table_1"     
    con.Open()     
    da = New SqlDataAdapter(strsql, con) '<- added this line here '  
    da.Fill(ds, "dd")      
    ....
    con.Close() 
End Sub 
Private Sub Form1\u Load(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
newmode=False
con=New-SqlConnection(“初始目录=测试;数据源=纳粹;集成安全性=sspi;”)
strsql=“从表1中选择*
con.Open()

da=New SqlDataAdapter(strsql,con)'我不知道为什么代码窗口中没有显示代码的某些部分?代码应该缩进四个空格(或者选择它,然后按CTRL-K)
数据集
不知道或使用用来填充它的连接,一旦它被填充——仅仅因为您想共享
数据集
(并将其保留为类字段),并不意味着连接对象不能在填充发生的方法中成为局部变量。另外-
Call
-严重吗?Dim da As New SqlDataAdapter(strsql,con)Dim ds As New DataSet()当我在私有子表单_1中声明这两行时,程序运行没有错误…但是当它到达第二个私有子表单(按钮_1)时,错误是“what is ds?”即使我删除con.close()语句我必须再次声明ds和da吗?每次我要使用它们时?当然不是,但解决办法是什么?