坑爹的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)
Do While reader.Read()
Dim nr = dt.NewRow
For i As Integer = 0 To colcount - 1
nr(i) = reader.GetValue(i)
dt.Rows.Add(nr)
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
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
在桌面应用程序开发中,如果有数据存储的需要,同时对性能要求不是极高,又想应用能够随时随地运行,轻便小巧的SQlite自然是不二之选。本篇其实跟Avalonia没啥关系,SQLite的操作辅助类网上也是一大堆,这里就权当温故知新了。...
System.Data.SQLite是sqlite官方实现的ado.net。据说已经不更新了,但我看最新的包是2020年4月份。
Microsoft.Data.Sqlite是微软官方实现的ado.net。
两者的接口类似但Microsoft.Data.Sqlite没有实现SQLiteDataAdapter。不知道怎么往dataset中装,所以我还是使用了System.Data.SQLite。
另外,System.Data.SQLite需要SQLite.Interop.dll,不知道Microsoft.
但是,Microsoft.Data.Sqlite 的最初目标是仍保持轻量级的新式特性。System.Data.SQLite 历史悠久,并且已发展成为具有 Visual Studio 工具的稳定且功能齐全的 ADO.NET 提供程序。在 2005 年,Robert Simpson 创建了System.Data.SQLite,这是 ADO.NET 2.0 的一个 SQLite 提供程序。Microsoft.Data.Sqlite 和 System.Data.SQLite 之间的最大区别是处理数据类型的方式。
今天使用asp.net core + sqlite 创建了一个demo项目,本地运行一切正常。可以添加,修改,删除数据。经过分析:原来是因为在发布项目的时候,生成的sqlite数据文件并没有复制到发布目标文件中。解决办法:生成的数据库文件,右键属性=>复制到输出目录,选择始终复制。
如果要更改已加密数据库的密钥,请发出 PRAGMA rekey 语句。遗憾的是,SQLite 在 PRAGMA 语句中不支持参数。 请改用 quote() 函数防止 SQL 注入。
var command = connection.CreateCommand();
command.CommandText = "SELECT quote($newPassword);";
command.Parameters.AddWithValue("$newPassword", newPassword);
连接字符串Connection strings12/13/2019本文内容用于指定如何连接到数据库的连接字符串。A connection string is used to specify how to connect to the database. Microsoft.Data.Sqlite 中的连接字符串遵循标准 ADO.NET 语法,形成以分号分隔的关键字和值的列表。Connection ...
说明:本文的代码是基于Winform中举例的,经过实测可用。1.封装Sqlite操作类:sqLiteHelperusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
namespace TestSqlite.sq