gpt4 book ai didi

.net - OleDB 数据库到 SQLite 数据库

转载 作者:行者123 更新时间:2023-12-05 05:21:49 25 4
gpt4 key购买 nike

我正在尝试通过 VB.net 从使用 OleDb 连接的数据库中获取数据,并获取数据集并尝试将其直接放入 sqlite 数据库中。我遇到的问题是我从第一个数据库中获取数据,但在我执行更新命令并查看 SQLite 数据库后,它是空的,记录为零。他们都指向同一目录中的两个不同数据库。我没有得到任何执行,但没有任何内容被填充到新的 SQLite 数据库中。对可能导致这种情况的原因有什么建议吗?

Dim ds As New DataSet 
Dim SQL As String = "SELECT * FROM SOMETABLE"
Using conn As New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0;Mode=Share Deny None;Data Source=Data.mdb;Jet OLEDB:Engine Type=5"
conn.Open()
Using com As New OleDbCommand(SQL, conn)
Using da As OleDBDataAdapter = New OleDBDataAdapter(conn)
da.Fill(ds, "Employees")
da.Dispose()
End Using
com.Dispose()
End Using
conn.Close()
End Using

Using conn As New SqliteConnection("Data Source=Data.db;Version=3;"
conn.Open()
Using com As New SqliteCommand(SQL, conn)
Using da As SqliteDataAdapter = New SqliteDataAdapter(conn)
Using cmdBuilder As New SQLiteCommandBuilder(da)
da.TableMappings.Add("SOMETABLE", "SOMETABLE")
da.InsertCommand = cmdBuilder.GetInsertCommand()
da.Update(ds, "SOMETABLE")
End Using
da.Dispose()
End Using
com.Dispose()
End Using
conn.Close()
End Using

最佳答案

请记住,DataTable 中的每一行都包含一个属性来跟踪其状态——无论是新的、更改的还是删除的。当您第一次读入数据时,该状态将是 unchanged 除非您以不同的方式告诉它。它也可以用更少的代码来完成:

Dim SQL As String = "SELECT Id, Name, ... ItemDate, Active FROM SampleY"

Dim dt As New DataTable
Using da As New OleDbDataAdapter(SQL, ACEConnStr)
' tell it not to set rows to Unchanged
da.AcceptChangesDuringFill = False
da.Fill(dt)
End Using

' for demo purposes
Console.WriteLine("Rows: {0}", dt.Rows.Count)
Console.WriteLine("State: {0}", dt.Rows(0).RowState)

Using da As New SQLiteDataAdapter(SQL, LiteConnStr)
Dim cb As New SQLiteCommandBuilder(da)
da.InsertCommand = cb.GetInsertCommand

Dim rows = da.Update(dt)
End Using

da.AcceptChangesDuringFill = False 告诉适配器在加载时不要在行上设置 RowState。调试行会将状态报告为“已添加”,这意味着它们有资格插入。

您也不需要所有那些 CloseDispose 调用;这就是 Using 语句的要点 - 它会为您做到这一点。使用 DbDataAdapter,您可以跳过创建 ConnectionCommand 对象,让它根据在构造函数中传递给它的 SQL 和 ConnectionString 创建自己的对象.

我也跳过了 DataSet,因为它只是一个表。

关于.net - OleDB 数据库到 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42078007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com