坑爹的Microsoft.Data.Sqlite没有SQLiteDataAdapter,如何实现读取datatatable和dataset
VB源码,自行理解转换C#
#Region "DataTable"
Private Function GetDataTable_CMD(SuperSQL As String, Optional timeOutSecound As Integer = 300, Optional UPData_command As SqliteCommand = Nothing) As System.Data.DataTable
Dim NeedDispose As Boolean = If(IsNothing(UPData_command), True, False)
If NeedDispose Then UPData_command = New SqliteCommand
UPData_command.CommandType = CommandType.Text
UPData_command.CommandTimeout = timeOutSecound
UPData_command.Connection = cn
UPData_command.CommandText = SuperSQL
If cn.State = ConnectionState.Closed Then cn.Open()
Using Reader = UPData_command.ExecuteReader
Dim dt = GetDataTableFromReader(Reader)
If NeedDispose Then UPData_command.Dispose()
Return dt
End Using
End Function
Function GetDataTable(ByVal SuperSQL As String, Optional timeOutSecound As Integer = 300) As System.Data.DataTable
Return GetDataTable_CMD(SuperSQL, timeOutSecound)
End Function
#End Region
#Region "DataSet"
Private Function GetDataTableFromReader(reader As SqliteDataReader) As DataTable
Dim dt As New DataTable
Dim dtcols = reader.GetColumnSchema
Dim colcount As Integer = dtcols.Count
For Each col In dtcols
dt.Columns.Add(col.ColumnName, col.DataType)
Next
Do While reader.Read()
Dim nr = dt.NewRow
For i As Integer = 0 To colcount - 1
nr(i) = reader.GetValue(i)
Next
dt.Rows.Add(nr)
Loop
Return dt
End Function
Function GetDataSet(ByVal SuperSQL As String, Optional timeOutSecound As Integer = 300) As System.Data.DataSet
Using UPData_command As New SqliteCommand
UPData_command.CommandType = CommandType.Text
UPData_command.CommandTimeout = timeOutSecound
UPData_command.Connection = cn
UPData_command.CommandText = SuperSQL
If cn.State = ConnectionState.Closed Then cn.Open()
Using Reader = UPData_command.ExecuteReader()
Dim hasResult = True
Dim ds As New DataSet
Dim index As Integer = 0
Do While hasResult
Dim dt = GetDataTableFromReader(Reader)
dt.TableName = "table" & index
ds.Tables.Add(dt)
hasResult = Reader.NextResult
index += 1
Loop
Return ds
End Using
End Using
End Function
Function GetDataSet(SuperSQL() As String, Optional timeOutSecound As Integer = 300) As System.Data.DataSet
Dim sqlstr = String.Join(vbCrLf, SuperSQL)
Return GetDataSet(sqlstr, timeOutSecound)
End Function
Function GetDataSet(SuperSQL() As List(Of String), Optional timeOutSecound As Integer = 300) As System.Data.DataSet
Return GetDataSet(SuperSQL.ToArray, timeOutSecound)
End Function
#End Region