ConnectionString属性尚未初始化。VB.NET出现错误

ConnectionString属性尚未初始化。VB.NET出现错误,vb.net,runtime-error,connection-string,Vb.net,Runtime Error,Connection String,我试图用access中的数据填充datagrid,但每次运行此程序时,我都会收到一个错误,表示ConnectionString属性尚未初始化,我已尝试了我所知道的一切。有人能帮忙吗 Private Sub RefreshData() cnn = New OleDb.OleDbConnection cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\My_db.

我试图用access中的数据填充datagrid,但每次运行此程序时,我都会收到一个错误,表示ConnectionString属性尚未初始化,我已尝试了我所知道的一切。有人能帮忙吗

 Private Sub RefreshData()
    cnn = New OleDb.OleDbConnection
    cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\My_db.accdb"
    If Not cnn.State = ConnectionState.Open Then
        ' open connection '
        cnn.Open()
    End If
    Dim da As New OleDb.OleDbDataAdapter()
    Dim dt As New DataTable

    'fill datatable'
    da.Fill(dt)

    Me.DataGridView1.DataSource = dt
    ' close connection'

    cnn.Close()
End Sub
Private Sub BindGrid()
    If Not cnn.State = ConnectionState.Open Then
        ' open connection '
        cnn.Open()
    End If
    Dim cmd As New OleDb.OleDbCommand
    cmd.Connection = cnn
    cmd.CommandText = "SELECT * FROM Training log WHERE Runner Name='" & Profile.UsernameTextBox.Text & "'"
    cmd.ExecuteNonQuery()

    Me.RefreshData()

    cnn.Close()
End Sub

看起来OleDbCommand从未设置为使用OleDbConnection对象,DataAdapter从未设置为使用该命令。试试这个,它还修复了其他几个不符合普遍接受的做法的项目:

'将此模块放在单独的文件中 '直接与DB对话的任何和*ALL*代码都应该放在这个模块中,并使用下面RefreshData方法的样式。 公共模块数据层 私有属性ConnectionString作为字符串 收到 返回提供程序=Microsoft.ACE.OLEDB.12.0;数据源=|数据目录|\My_db.accdb 结束 端属性 “我留下了这个名字,这样你就可以把它和你的原始代码匹配起来, “但更好的名字应该是TrainingLogByRunner之类的名字 公共函数RefreshDataByVal RunnerName作为字符串作为DataTable Dim dt作为新数据表 使用cnn作为新的OleDb.OleDb连接字符串_ cmd作为新的OleDb.OLEDBCommand从[Training log]中选择*,其中[Runner Name]=?,cnn_ da作为新的OleDb.OleDb数据适配器CMD “**决不**使用字符串缩聚将此类值替换为查询! '必须在此处猜测列类型/长度 cmd.Parameters.Add?,OleDbType.VarWChar,40.Value=RunnerName '无需为连接呼叫Open。。。 'DataAdapter.Fill方法将管理打开/关闭连接 菲尔特夫人 终端使用 返回dt 端函数 端模块 私有子网 Me.DataGridView1.DataSource=DataLayer.RefreshDataProfile.UsernameTextBox.Text 端接头
能否尝试添加cnn.ConnectionString=Provider=Microsoft.ACE.OLEDB.12.0;数据源=| DataDirectory |\My_db.accdb to function BindGrid?这里的sql注入漏洞让我很难过: