【问题标题】:ADO Recordset returns nothingADO 记录集不返回任何内容
【发布时间】:2017-06-03 02:17:31
【问题描述】:

我正在使用 ADO Recorset 访问 MySQL 表,但是 ADO Recordset 不返回记录。我在 Visual Studio 中使用 VB.NET。我可以通过连接对象(如下)与数据库建立通信,建立连接,创建表,但是在通过 Recordset 返回信息时,会出错。

Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim fld As ADODB.Field
Dim aux As String

aux = "Provider = MSDASQL;Driver={MySQL ODBC 5.2 ANSI Driver}; Server=localhost; Database = db-teste; User=root; Password=123456; Option=3;"
conn.Open(aux)

'create table
conn.Execute("DROP TABLE IF EXISTS my_ado")
conn.Execute("CREATE TABLE my_ado(id int Not null primary key, name varchar(20)," &
                "txt text, dt date, tm time, ts timestamp)")
'insert
conn.Execute("INSERT INTO my_ado(id,name,txt) values(1,100,'venu')")
conn.Execute("INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')")

'============================================================================
' UNTIL HERE, IT WORKS FINE!
'============================================================================


' This does not get anything
rs.Open("SELECT * FROM my_ado", conn)
rs.MoveFirst()

' RecordCount always returns "-1" <<<<<<====================
Debug.Print(Str(rs.RecordCount()))

' rs.Fields = ERROR
For Each fld In rs.Fields 
    Debug.Print(fld.Name)
Next

怎么了?

【问题讨论】:

    标签: mysql vb.net ado


    【解决方案1】:

    检查数据库配置,确保AUTO COMMIT开关打开,否则需要提交数据。我对 MySQL 并不完全熟悉,但我知道 INSERT 需要以一种或另一种方式提交。

    这篇文章解释了一切:

    https://dba.stackexchange.com/questions/4252/do-inserts-get-auto-committed

    将此添加到您的代码中 rs.Open("SELECT * FROM my_ado", conn) 代码行之后:

    ' Create dataset and data adapter objects
    Dim ds As New DataSet("Recordset")
    Dim da As New OleDbDataAdapter()
    
    ' Call data adapter's Fill method to fill data from ADO
    ' Recordset to the dataset
    
    da.Fill(ds, rs, "Data")
    

    数据应该在ds.Tables!Data,你可以用这一行检查:

    ds.Tables!Data.Rows.Count
    

    【讨论】:

    • 谢谢,但我认为这是另一个问题...当我运行conn.Execute() 时,ADOconnection 会自动执行提交,所以这样就不需要创建conn.CommitTrans()。如果我做conn.CommitTrans(),它会抛出一个错误“没有活动的交易”
    • 您可以“手动”访问数据库并转储表吗?此外,可能什么都没有,但表列的名称暗示 NAME 列是一个字符串,就像我的名字一样,但值是数字,只是一个观察。不应该产生错误,因为隐式转换应该转换它。
    • 是的,我可以访问表。该列的值是数字,但是当我得到值时,它由“ToString”转换。我试图访问另一个表和其他列类型。这是同样的问题...谢谢
    • 很抱歉我要问的问题,但是您是否有一个已经在 VB.NET 中测试过的现成可用示例?
    • 我使用 Oracle Datatbase 后端,很久没有使用 ADODB 做任何事情了。我可能有一些旧代码,如果我能找到它,我会发布它。
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多