我用SQLite DB创建了一个VB.Net应用程序,并添加了一些数据,我可以执行所有的CRUD函数现在我回到应用程序,并添加了一个新的表TxArchiveData,其中包含以下代码注意,我在新表中省略了这部分代码
NOT NULL PRIMARY KEY AUTOINCREMENT
字符串
创建以下TxArchiveData TABLE的代码
Private Sub btnNewTable_Click(sender As Object, e As EventArgs) Handles btnNewTable.Click
'create table TxArchiveDataTable String for cmd
Dim create_table As String = String.Empty
create_table = "CREATE TABLE IF NOT EXISTS TxArchiveData(
TID INTEGER,
txSortDate TEXT,
txAmount TEXT,
txYear INTEGER,
txSearchMonth INTEGER)"
Dim dbTable As String = "TxArchiveData"
If Not My.Computer.FileSystem.FileExists(dbTable) Then
Try
Using conn As New SQLiteConnection(connStr)
conn.Open()
Using cmd As New SQLiteCommand(create_table, conn)
cmd.ExecuteNonQuery()
End Using
End Using
tbMessage.Text = "TABLE Created Select BACK"
Catch ex As Exception
tbMessage.Text = "TxArchiveData Table FAILED"
End Try
End If
型
下面是创建TxData TABLE NOTE共享命名的代码
Public Sub makeTxData()
'create table TxDataTable String for cmd
Dim create_table As String = String.Empty
create_table = "CREATE TABLE IF NOT EXISTS TxData(
TID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
txSortDate TEXT,
txAmount TEXT,
txYear INTEGER,
txSearchMonth INTEGER)"
Dim dbTable As String = "TxDataTable"
If Not My.Computer.FileSystem.FileExists(dbTable) Then
Try
Using conn As New SQLiteConnection(connStr)
conn.Open()
Using cmd As New SQLiteCommand(create_table, conn)
cmd.ExecuteNonQuery()
End Using
End Using
tbMessage.Text = "DB Created Select BACK"
Catch ex As Exception
tbMessage.Text = "TxData Table FAILED"
End Try
End If
End Sub
型
在另一个我没有打开SQLite DB的表单上,我放置了以下代码
Private Sub btnMoveData_Click(sender As Object, e As EventArgs) Handles btnMoveData.Click
Dim TxData As DataTable = New DataTable()
Dim TxArchiveData As DataTable = New DataTable()
For Each row As DataRow In TxData.Rows
TxArchiveData.ImportRow(row)
Next
End Sub
型
问题是我是否需要连接到DB以使IMPORT ROW工作,如果需要,如何连接?
我还尝试只移动与txYear列匹配的数据,将此功能添加到答案中将非常有帮助**
我已经走了这么远,仍然迷失在这里是代码
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
Dim TxData As New DataTable
Dim TxArchiveData As New DataTable
Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")
conn.Open()
Using cmd As New SQLiteCommand("", conn)
cmd.CommandText = "SELECT * FROM TxData"
For Each dr As DataRow In TxData.Rows
TxArchiveData.ImportRow(dr)
Next
End Using
End Using
End Sub
型
2条答案
按热度按时间piok6c0g1#
这里有许多问题需要解决。
第一:
我需要连接到数据库才能让导入行工作吗?如果需要,如何连接?
不,你当然不需要。
ImportRow
把一个DataRow
从一个DataTable
复制到另一个。就是这样,仅此而已。DataTables
和数据库之间没有直接连接。如何填充源DataTable
以及如何处理目标DataTable
的内容与ImportRow
的使用无关。如果源数据来自一个数据库,那么很明显你需要连接到那个数据库来检索数据,但这是不相关的。其次,没有必要也没有指向使用
ImportRow
。你只需要一个DataTable
。你也只需要一个数据适配器。当你调用Fill
时,数据适配器的SelectCommand
被执行,当你调用Update
时,InsertCommand
可以被执行。没有什么说他们需要引用同一个数据库表,甚至是同一个数据库。你可以从一个表中SELECT
数据,在另一个表中INSERT
数据,例如。字符串
需要注意的一点是
AcceptChangesDuringFill
属性的设置。当您将DataRow
添加到DataTable
时,其RowState
默认为Added
。当您调用Fill
时,它将添加检索到的行,然后调用AcceptChanges
,通过将AcceptChangesDuringFill
设置为False
,您可以确保所有行保持Added
,准备插入。话虽如此,你甚至不需要在应用中检索任何数据来填充新的数据库表。你可以使用
SELECT INTO
创建一个新表,从现有表中选择记录并将它们插入新表。如果目标表已经存在,你可以插入其中并使用查询作为源,而不是VALUES
子句,例如:型
您可以在命令对象上调用
ExecuteNonQuery
来执行这些选项中的任何一个,nsc4cvqm2#
试图使用ImportRow是错误的工具。
也就是说,我试图将数据存档在另一个表中,
只显示2年的数据。一些性能增强。
下面是移动数据的代码和防止
用户将相同的数据移动两次。
字符串