使用SQL'select'FININ A TRANSACTION填充数据表

时间:2012-08-01 01:02:48

标签: sql vb.net sqlite

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

 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

1 个答案:

答案 0 :(得分:1)

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

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

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

例如(在Dim cmdSQLite之后):

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

并将ExecuteNonQuery行替换为:

oAdapter.Fill(oDataTable)

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

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