【问题标题】:How do I resolve SQL ConnectionString error?如何解决 SQL ConnectionString 错误?
【发布时间】:2021-01-13 00:33:54
【问题描述】:

我有一个带有 DataGridView 和一个按钮的表单。他们正在与 Access (.mdb) 数据库进行交互。单击按钮时,我希望它更新表中的数据。

我收到以下错误:

“OleDbConnection”类型的值无法转换为 'SqlConnection'。

我的代码:

Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Form1
    Public conn As New OleDbConnection

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim DS As New DataSet
        Dim DT As New DataTable
        DS.Tables.Add(DT)
        Dim objConn As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source = Swiftest.mdb"
        conn.ConnectionString = objConn
        Dim objDA As New OleDb.OleDbDataAdapter("SELECT * FROM tblOptions", conn)
        objDA.Fill(DT)
        DataGridView1.DataSource = DT.DefaultView
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim SqlQuery As String = "'UPDATE tblOptions Set fldShow = '1' WHERE fldID = '13'"
        conn.Open()
        Dim com As New SqlCommand(SqlQuery, conn)
    End Sub
End Class

感谢阅读

【问题讨论】:

  • 删除此:Public conn As New OleDbConnection 和此:Imports System.Data.SqlClient(此处未使用),声明连接和 OleDbCommand(不是 SqlCommand),两者都使用 Using 语句,所以你会立即处理这些物品。 -- 你不需要数据集。您可能需要OleDbDataAdapter 来更新数据库。旁注:需要使用完整路径或使用 |DataDirectory| 设置声明数据库路径。
  • 您好 Jimi,感谢您的回复。如何使用适配器而不是数据集?
  • Updating Data Sources with DataAdapters。使用您在那里找到的信息搜索 SO。关于这个主题的许多答案。

标签: vb.net oledb


【解决方案1】:

几个可用的数据库对象是 ADO.net 有.Dispose 方法。如果一个对象有一个 dispose 方法,它可能正在使用非托管资源(.net 框架之外的资源)。这些对象需要释放这些资源,它们在 dispose 方法中执行此操作。幸运的是,.net 语言提供了Using...End Using 块,这将保证即使出现错误也会调用.Dispose

鉴于此,在使用它们的SubFunction 中创建您的数据库对象,以便它们可以包含在Using 块中。请注意连接 Using 行末尾的逗号。这表明下一行的对象(命令)包含在同一个 Using 块中。

在您的 Form.Load 事件中,您从未使用过适配器或数据集。只需加载数据表。

在最后一刻打开连接,直接在.Execute... 之前,并立即使用End Using 关闭。在您的Button1.Click 事件中,您打开一个连接,从不执行任何操作,也从不关闭它。

在您的更新命令中,您提供文字为String。通常,ID 字段是Integer。检查数据库中字段的数据类型。如果您想提供不是文字的值,请使用参数。

Private connStr As String = "Provider=Microsoft.JET.OLEDB.4.0; Data Source = Swiftest.mdb"

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim DT As New DataTable

    Using conn As New OleDbConnection(connStr),
          cmd As New OleDbCommand("SELECT * FROM tblOptions", conn)
        conn.Open()

        Using reader = cmd.ExecuteReader
            DT.Load(reader)
        End Using
    End Using

    DataGridView1.DataSource = DT.DefaultView
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using conn As New OleDbConnection(connStr),
          cmd As New OleDbCommand("UPDATE tblOptions Set fldShow = '1' WHERE fldID = '13'", conn)
        conn.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2020-05-19
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多