0

我想用 SQL 选择语句的结果填充数据表,但使用事务。我使用事务的原因是因为我有一个名称列表(作为数据表),并且我想遍历名称列表并选择名称 = 列表中名称的数据库行。数据库中有 500,000 个名称,我只想检索相关行。我有该过程的代码,因为我认为它应该看起来像(未经测试)但我不知道如何将数据放入数据表中......所以我错过了我声明数据表和该表的“填充”的东西,有人可以帮忙吗?或者建议我如何在不单独查找每个名称的情况下从数据库中获取信息。

 Using connection As New SQLite.SQLiteConnection(R2WconectionString)
            connection.Open()
            Dim sqliteTran As SQLite.SQLiteTransaction = connection.BeginTransaction()
            Try
                oMainQueryR = "SELECT NameID, Address, Ocupation FROM Employees Where Name= :Name"
                Dim cmdSQLite As SQLite.SQLiteCommand = connection.CreateCommand()
                With cmdSQLite
                    .CommandType = CommandType.Text
                    .CommandText = oMainQueryR
                    .Parameters.Add(":Name", SqlDbType.VarChar)
                End With
               'Prevent duplicate selects by using a dictionary
                Dim NameInalready As New Dictionary(Of String, String) 

                For Each row As DataRow In TheLIST.Rows
                    If NameInalready.ContainsKey(row.Item("Name")) Then
                    Else
                        NameInalready.Add(row.Item("Name"), "")
                        cmdSQLite.Parameters(":Name").Value = row.Item("Name")
                        cmdSQLite.ExecuteNonQuery()
                    End If

                Next

                sqliteTran.Commit()

            Catch ex As Exception
            End Try
        End Using
4

1 回答 1

1

首先,您不需要事务,因为您没有更新数据库。

其次,根据 TheLIST 中可能的名称数量,您可能值得将名称选择器更改为IN(即SELECT * FROM Employees WHERE Name IN ('name1', 'name2')。但是,如果您预计超过 10 个,这可能不值得麻烦。

最后,您需要创建一个新的 DataTable 来保存结果。然后您需要创建一个将 cmdSqlLite 作为构造函数参数传递的 DataAdapter。最后,将您的 ExecuteNonQuery 替换为 DataAdapter.Fill(DataTable)。

例如(在 之后Dim cmdSQLite):

Dim oDataTable As New DataTable("Employees")
Dim oAdapter As New SqliteDataAdapter(cmdSQLite)

并将该ExecuteNonQuery行替换为:

oAdapter.Fill(oDataTable)

我将通过说它可能需要一些调整来限定此代码。我只使用类对象和集合,所以我的偏好实际上是加载 Employee 类实例的集合。

我会通过用 ExecuteReader 替换 ExecuteNonQuery 然后将读取的数据加载到新的类实例中来做到这一点。这种方法解决了跨服务边界序列化数据的各种问题(例如,用于 Web 服务的 Xml),如果需要,还允许您将业务逻辑嵌入到类中。

于 2012-08-01T01:15:26.000 回答