本文属于原创,转载请评释出处,多谢!

正文属于原创,转发请注解出处,感激!

       
假使贰个.NET应用要自适应3二位/陆10个人系统,只必要在项目的“指标平台”设置为“Any
CPU”。但是只要利用中利用了SQLite,景况就分裂了。

–首发于果壳网, 转发请保留此链接  博客原作地址

1、开发条件

一、开发条件

 

正文运营条件: Win柒 X64, VS20拾

操作系统:Windows 十 X6四

操作系统:Windows 10 X64

 
 SQLite的.NET开发包来自是System.Data.SQLite,实现包容ADO.NET接口,也提供了Linq和Entity
Framework
陆达成。但那不首要,主要的是System.Data.SQLite是由两有的代码组成的,1部分是非托管的C++代码达成,一部分是托管代码与.NET
框架接口。由于非托管代码不可能创设成“Any
CPU”的,所以System.Data.SQLite的下载页面包车型大巴种种包都以按311位或陆拾一个人系统开始展览了界别的。

1. SQLite 的优点:

    SQLite 是一款轻型数据库,开发包唯有十几M, 相对于 MSSQL 多少个 G
的体积来说大概是小 Case, 而且在打包成的软件里只供给添加相关的 DLL
就足以在别的的电脑运转,那一点来说比 Access 数据库还要来得便宜。

  SQLite尽管很精细,可是扶助的SQL语句不会太未有于其余开源数据库。

   
越多详情参见百科:SQLite

付出环境:VS20一5

开发环境:VS2015

 

贰. 开发包下载

    SQLite
官方下载网站

   
本文所用开签发承包合约:sqlite-netFx40-setup-bundle-x86-2010-1.0.93.0.exe 

编制程序语言:C#

编制程序语言:C#

  聊到那里,顺便说一下,看着System.Data.SQLite的下载页面就眼冒木星。即使在下载页面一初步就花了大批量的字数来验证如何选取下载,可是估量没多少人会把它看完,所以这里依然简单介绍一下。

3. VS 2010 使用 SQLite

NET中自适应叁拾捌个人,实例程序。.NET版本:.NET Framework 4.0

.NET版本:.NET Framework 4.0

 

3.1 安装 SQLite

     三.一.一. 装置部件有三个选取:Full installation(完全安装), Compact
installation(精简安装), Custom installation(自定义安装), 本文所选为 Full
installation

     叁.一.二 默许为不勾选 Instatll the designer components for Visual
Studio 20十, 能够把那些选上

金沙注册送58 1

 

指标平台:X八陆

目的平台:X八陆


   一)
首先是按类型分为安装包、非静态连接的二进制包和静态连接的2进制包。安装包会安装相关的动态库到系统内,并注册到GAC(Global
Assembly
Cache);二种2进制包的区分在于非托管部分的连日方式各异,非静态连接的二进制包在动用时供给VC启动时库的扶助。要求专注的是:假使急需在
Visual Studio中总是SQLite数据库,就无法不挑选安妥的安装包举行设置。

 

  比如,要在Visual Studio
20第10中学年老年是SQLite,应该下载“sqlite-netFx40-setup-bundle-x捌陆-200玖-一.0.90.0.exe”,那在下载包的认证中有人所共知行草字表明。

金沙注册送58 2

 

[下载包的验证中有显然的石籀文字表达]

金沙注册送58 , 

  安装之后就足以在Visual Studio 20第10中学接二连三SQLite了:

金沙注册送58 3

 

[在Visual Studio中连接SQLite]

 

   二) 每一个门类都按.NET版本分成了若干小组,近期从.NET 二.0 SP二到.NET
4.伍.一,壹共扶助四个本子的.NET
Framework。各种.NET版本又分为三十七个人和陆9个人两组。选择31位照旧64人是依照使用系统来决定的。比如开发的时候是6十一人系统而发布后运维在3肆个人系统上,就需求在支付时利用六十一位System.Data.SQLite.dll,而在公布时用30人的
System.Data.SQLite.dll替换(看起来很困苦的规范请看后面包车型地铁消除办法)。

 

   3)
在种种.NET版本分组中都有二个文件包,一个饱含“bundle”字样,另三个从未有过。当中涵盖“bundle”字样的表示动态库是按混合格局编写翻译的,在
使用的时候只要求System.Data.SQLite.dll就足以了,而不带“bundle”的则是将非托管部分和托管部分各自编写翻译,System.Data.SQLite.dll不可能独立使用,还需要有SQLite.Interop.dll才能运用。


 

3.1.贰 先在本地创制一个空手文件,扩张名字为*.db,

         添加 SQLite 连接: Server Explorer -> Data Connections ->
Add Connection …

         Data Source 为 SQLite Database file

       
 由于表结构相似是2遍性创作,所以添加数据库后使用视图直接建立数据表结构,不必接纳代码创制

金沙注册送58 4

金沙注册送58 5

金沙注册送58 6

二、前言

二、前言

  言归正传,假若要选拔“Any
CPU”的System.Data.SQLite.dll,就无法不运用不带“bundle”字样,即非混合编写翻译的二进制包。

3.1.3 添加 SQLite 引用

        Solution Explorer -> Reference -> Add Reference…       
找到SQLite 安装路径添加 System.Data.SQLite.dll 引用 

        该类库包罗SQLiteConnection , SQLiteCommand,SQLiteDataAdapter
等延续操作数据库必要的类

在此之前运用的是软件的Access来创制基于本地的数据库软件,发未来选用进程中,发现Access相比耗内部存款和储蓄器,运维速度比SQLite稍微慢,其余二个最根本的是Access加密的文书简单被破解,由此,现在转化使用SQLite来代表Access。

前面运用的是软件的Access来创制基于本地的数据库软件,发以后行使进程中,发现Access比较耗内部存款和储蓄器,运转速度比SQLite稍微慢,其它1个最器重的是Access加密的公文简单被破解,因而,未来转化使用SQLite来代表Access。

 

三.一.四 新建 SQLiteHelper 类,首倘使db 连接的宗旨消息,如路径,以及部分数据表的基本操作方法(依照个人要求):

    public class SQLiteHelper
    {
        public SQLiteConnection Connection
        {
            get
            {
                if (_cn == null)
                {
                    Settings settings = new Settings();
                    string connection = settings.Connection.ToString();
                    _cn = new SQLiteConnection(connection);
                }
                return _cn;
            }
        }

        private SQLiteConnection _cn = null;

        public DataTable GetDataTable(string query)
        {
            DataTable dt = new DataTable();
            try
            {
                Connection.Open();
                GetAdapter(query).Fill(dt);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Connection.Close();
            }
            return dt;
        }

        public bool Update(string tableName, DataTable dt)
        {
            try
            {
                Connection.Open();
                string tableStructureQuery = string.Format("SELECT * FROM {0} WHERE 1 = 0", tableName);
                SQLiteDataAdapter da = GetAdapter(tableStructureQuery);
                da.Update(dt);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Connection.Close();
            }
            return true;
        }

        public SQLiteDataAdapter GetAdapter(string query)
        {
            SQLiteCommand selectCommand = new SQLiteCommand(query, Connection);
            SQLiteDataAdapter adapter = new SQLiteDataAdapter(selectCommand);
            SQLiteCommandBuilder sb = new SQLiteCommandBuilder(adapter);
            return adapter;
        }

        public bool ExecuteScript(string query)
        {
            try
            {
                SQLiteCommand selectCommand = new SQLiteCommand(query, Connection);
                Connection.Open();
                selectCommand.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
            finally
            {
                Connection.Close();
            }

            return true;
        }
    }

    public static class DataViewHelper
    {
        public static DataView Clone(this DataView source, string filter)
        {
            if (source == null)
            {
                throw new ApplicationException("Source cannot be null");
            }

            DataView newView = new DataView(source.Table);

            string viewfilter = source.RowFilter;

            List<string> filters = new List<string>();
            if (!string.IsNullOrEmpty(viewfilter))
                filters.Add(string.Format("({0})", viewfilter));
            if (!string.IsNullOrEmpty(filter))
                filters.Add(string.Format("({0})", filter));

            newView.RowFilter = string.Join(" AND ", filters.ToArray());

            return newView;
        }

        public static DataView Clone(this DataView source)
        {
            return source.Clone(string.Empty);
        }
    }

 

(壹) 在那之中 Setting.Connection 为 string 类型,只供给钦赐 db 路径,本文
Connection 为: Data Source=D:\Trade\Trade\DB\Quotation.db 

      那里提一下 MSSQL 的 连接字符串以示相比较,一般情状下 MSSQL
的总是为ConnectionString 类型的布置节点,如:

      <add name=”Test” connectionString=”Data
Source=ServerName;Initial Catalog=dbName;User ID=xxx;Password=***;”
      providerName=”System.Data.SqlClient” />

(2) 能够看到数库表的操作方法 与 其余数据库操作
类似:连接,运转操作命令,关闭

(三) 作者尝试添加二个 SQLiteParameter.Direction
为 ParameterDirection.Output 的参数 但报错,到现在没找到科学的利用方法

(4) 使用 SQLiteConnection 能够用 using
的艺术利用,有利于程序内部存款和储蓄器管理及垃圾回收

三、SQLite的下载

三、SQLite的下载

 
 非混合编写翻译的二进制包有System.Data.SQLite.dll和SQLite.Interop.dll几个动态库。按法定表达,SQLite.Interop.dll是可以放与System.Data.SQLite.dll相同的目录下,也足以置身x八六或x6四子目录下,由
System.Data.SQLite.dll依照系统项目调用。为了确认,下载如下多少个包来进展相比:

三.一.5 新建 DAO 类,继承 SQLiteHelper ,首假设针对实际表 的办法: 

 

    public class DAO : SQLiteHelper
    {
        public DAO(string tableName)
        {
            TableName = tableName;
        }
        public string SelectTableQuery { get { return "SELECT * FROM " + TableName; } }

        public string TableStructureQuery { get { return SelectTableQuery + " WHERE 1=0"; } }

        public int GetMaxID(string fieldName)
        {
            StringBuilder commandText = new StringBuilder();
            commandText.AppendLine(string.Format(@"SELECT MAX({0}) ", fieldName));
            commandText.AppendLine(string.Format(@" FROM {0} ", TableName));
            DataTable dt = GetDataTable(commandText.ToString());
            if (dt == null || dt.Rows.Count == 0)
                return 0;
            else
                return int.Parse(dt.Rows[0][0].ToString());
        }

        public string TableName { get; set; }

        internal DataTable GetDataTableStructor()
        {
            return GetDataTable(TableStructureQuery);
        }

        public bool Update(DataTable dt)
        {
            return base.Update(TableName, dt);
        }
    }

 

壹、由于是基于.NET的C#编程,需下载System.Data.SQLite.dll来举行引用,下载网站如下:

一、由于是基于.NET的C#编制程序,需下载System.Data.SQLite.dll来举行引用,下载网站如下:

sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip

sqlite-netFx40-binary-x64-2010-1.0.90.0.zip

4. SQLite 实例小程序 

    Quotation
小程序是用于查看工商业银行行贵金属报价的小工具(那里只更新纸黄金报价),兴业银行贵金属报价法定网站

    用户能够天天查阅报价,设置 更新频率(私下认可更新周期为 120 s )。

    下载的价码数据保存到 quotation.db
里,同时用户能够上传个人贵金属账户交易记录。

   
依照交易记录设置个人购买销售差价,选拔是还是不是播放音乐提示用户购购销出,适用于贵金属短线投资赞助小工具(投资有风险,入市需谨慎)

 

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

  结果发现唯有SQLite.Interop.*不等,别的文件都完全相同

四.一 使用方法:

4.1.1 下载:Quotation  Setup
和 db 文件 ( setup 文件用 VS 自带工具打包好的MSI 文件 非源代码 )

四.1.2 安装 Setup 文件, PS: 想要明白 db 结构的读者能够用 VS 或任何
SQLite 命令、视图软件查看

肆.一.三 更改配置文件,打开 Trade.exe.config , 修改 节点:

<setting name=”Connection” serializeAs=”String”>
<value>Data
Source=D:\Trade\Trade\DB\Quotation.db</value>
</setting>

        当中 <value>Data Source = db path</value> 是
Quotation.db 的存放路径,注意假设软件设置在 C
盘保存时或者提醒不能访问,那时能够把 .config
文件复制出来修改后再交替原来的文本

肆.1.四 从 <Load Trx> 菜单命令导入从招行下载好的 txt
文件(不要改动格式)用于比较差价, <Transactions>
查看导入的交易记录,无效的交易记录能够选中后 Transactions -> Close
来关闭记录。

四.一.5小程序为小编个人支付,用于学习交换,个人免费应用,作品权解释权归软件笔者全部,任哪个人不得举行反编写翻译及那个向别人收取其余花费,欢迎读者留言提议意见和提出。

四.壹.陆 程序截图

金沙注册送58 7

 

 

补充:

android app 查询华夏银行报价可到以下网站下载:

IcbcQuotation
下载 

软件表明: 其实是报价网站的飞快格局,只是每隔30s 自动刷新一下

软件截图:

金沙注册送58 8

二、由于应用的是.NET Framework 四.0,且软件开发的目的平台是X8陆,因而需下载
sqlite-netFx40-setup-x八6-20⑩-一.0.十5.二.exe 软件,下载网站如下:

二、由于选取的是.NET Framework 4.0,且软件开发的指标平台是X八陆,由此需下载
sqlite-netFx40-setup-x八陆-20十-一.0.105.2.exe 软件,下载网站如下:

金沙注册送58 9

http://system.data.sqlite.org/downloads/1.0.105.2/sqlite-netFx40-setup-x86-2010-1.0.105.2.exe
http://system.data.sqlite.org/downloads/1.0.105.2/sqlite-netFx40-setup-x86-2010-1.0.105.2.exe

 

除此以外,还有1个 sqlite-netFx40-setup-bundle-x八陆-200玖-一.0.10伍.二.exe,它与
sqlite-netFx40-setup-x八陆-20拾-1.0.十五.二.exe
的区分是,它富含VS20拾的运营时组件,因利用的VS201五,全体安装该带有bundle的软件其实未有何样用处,固然您使用的是VS200八,则能够举行下载安装,下载网站如下:

别的,还有3个 sqlite-netFx40-setup-bundle-x8陆-2010-壹.0.十伍.贰.exe,它与
sqlite-netFx40-setup-x八陆-2010-一.0.105.2.exe
的区分是,它包蕴VS2010的运维时组件,因利用的VS20一5,全体安装该带有bundle的软件其实未有啥样用处,若是您使用的是VS20十,则足以拓展下载安装,下载网址如下:

[正如结实:唯有SQLite.Interop.*不同]

http://system.data.sqlite.org/downloads/1.0.105.2/sqlite-netFx40-setup-bundle-x86-2010-1.0.105.2.exe
http://system.data.sqlite.org/downloads/1.0.105.2/sqlite-netFx40-setup-bundle-x86-2010-1.0.105.2.exe

 

3、下载的是Setup安装包,由此只需坚守点击下一步(Next)或设置(Install),直至安装完成即可。

三、下载的是Setup安装包,由此只需根据点击下一步(Next)或设置(Install),直至安装收尾即可。

  然后将多个包的SQLite.Interop.*独家位居x八陆和x6四子目录下,合并成2个包。再在分化类型的体系下运作test.exe,结果都以完全通过

4、创设加密版本的SQLite数据库

肆、创造加密版本的SQLite数据库

金沙注册送58 10

在此选用的SQLite数据库管理软件为SQLite
Studio,版本为3.一.壹,下载网站如下:

在此接纳的SQLite数据库管理软件为SQLite
Studio,版本为三.一.一,下载网站如下:

 

https://sqlitestudio.pl/files/sqlitestudio3/complete/win32/sqlitestudio-3.1.1.zip
https://sqlitestudio.pl/files/sqlitestudio3/complete/win32/sqlitestudio-3.1.1.zip

 

有人会问,怎么不选拔Navicat For
SQLite,这几个软件不仅有完全的国语版本,而且还有详细使用表达,不是越来越好啊?

有人会问,怎么不选择Navicat For
SQLite,那几个软件不仅有完全的中文版本,而且还有详细使用表达,不是更加好呢?

   最后索要做的便是在Visual
Studio项目中援引System.Data.SQLite.dll,再将x8六\SQLite.Interop.dll和x64
\SQLite.Interop.dll拷贝到项目根目录,蕴含在项目中,在性质中装置“假诺较新则复制”或“始终复制”。生成结果就如这么:

骨子里,当初也想用这些软件来对SQLite数据库实行田管,但在创建加密版本的SQLite数据库时,发现使用System.Data.SQLite.dll来对该数据库操作时,会弹出类似数据库文件被加密恐怕不是数据库文件的唤醒,而非加密版本的就从未有过此题材,因而,能够接纳Navicat
For
SQLite来对非加密的SQLite数据操作,但假如要求使用加密的SQLite数据库,推荐应用SQLite
Studio,因为它生成的加密版本SQLite数据库能够被System.Data.SQLite.dll识别。

实质上,当初也想用那么些软件来对SQLite数据库举办田管,但在成立加密版本的SQLite数据库时,发现使用System.Data.SQLite.dll来对该数据库操作时,会弹出类似数据库文件被加密恐怕不是数据库文件的唤醒,而非加密版本的就从不此题材,由此,可以选择Navicat
For
SQLite来对非加密的SQLite数据操作,但万一必要动用加密的SQLite数据库,推荐使用SQLite
Studio,因为它生成的加密版本SQLite数据库能够被System.Data.SQLite.dll识别。

TestSQLite\bin\Debug

│  System.Data.SQLite.dll

│  TestSQLite.exe

├─x64

│      SQLite.Interop.dll

└─x86

       SQLite.Interop.dll

有关为何不能够运用Navicat For
SQLite来对加密数据库记性操作的来由是:Navicat使用的加密算法与SQLite
Studio的不等同。

关于为何无法利用Navicat For
SQLite来对加密数据库记性操作的原故是:Navicat使用的加密算法与SQLite
Studio的不雷同。

  组合后的包命名叫“sqlite-netFx40-static-binary-x86-x6四-2010-一.0.90.0.zip”,共享给大家,欢迎下载使用。

一、打开SQLite Studio,点击“添加数据库”按钮,如下图所示:

一、打开SQLite Studio,点击“添加数据库”按钮,如下图所示:

 

金沙注册送58 11

金沙注册送58 12

◆ 51CTO财富站共享

◆ 360云盘共享

二、数据类型接纳“System.Data.SQLite”,点击灰褐增进按钮,将文件保留至D:\Test.db,并在Password1栏内输入密码:20一七(如不使用密码,此处留空即可),然后点击“OK”按钮即可成立3个加密版本的SQLite
DB文件,如下图所示:

2、数据类型选择“System.Data.SQLite”,点击法国红增进按钮,将文件保留至D:\Test.db,并在Password1栏内输入密码:201柒(如不使用密码,此处留空即可),然后点击“OK”按钮即可创造3个加密版本的SQLite
DB文件,如下图所示:

 

金沙注册送58 13

金沙注册送58 14

 

三、双击“Test”数据库,将会显得其下的子节点,选拔“Tables”,并在工具栏点击“新建表”按钮,如下图所示:

3、双击“Test”数据库,将会来得其下的子节点,选取“Tables”,并在工具栏点击“新建表”按钮,如下图所示:

转自:

金沙注册送58 15

金沙注册送58 16

4、在Table name文本框内输入表名Info,并点击“Add
columns(Ins)”图标以便添加列,如下图所示:

四、在Table name文本框内输入表名Info,并点击“Add
columns(Ins)”图标以便添加列,如下图所示:

金沙注册送58 17

金沙注册送58 18

伍、添加第一个字段,字段名叫ID,数据类型为Text,将主键前的复选框打钩,并点击“OK”按钮,如下图所示:

5、添加第贰个字段,字段名字为ID,数据类型为Text,将主键前的复选框打钩,并点击“OK”按钮,如下图所示:

金沙注册送58 19

金沙注册送58 20

陆、重复第5个步骤,点击“Add
columns(Ins)”图标以便添加其它2个列,字段名称叫Name,数据类型为Text,将非空前的复选框打钩,并点击“OK”按钮,如下图所示:

陆、重复第陆个步骤,点击“Add
columns(Ins)”图标以便添加其余八个列,字段名字为Name,数据类型为Text,将非空前的复选框打钩,并点击“OK”按钮,如下图所示:

金沙注册送58 21

金沙注册送58 22

七、点击“Commit structure changes”图标以便保存该表及字段,如下图所示:

七、点击“Commit structure changes”图标以便保存该表及字段,如下图所示:

金沙注册送58 23

金沙注册送58 24

8、在弹出的对话框点击“OK”按钮,即可完结表单的创办工作,如下图所示:

8、在弹出的对话框点击“OK”按钮,即可成功表单的创导工作,如下图所示:

金沙注册送58 25

金沙注册送58 26

九、选择“数据”选项卡,点击“插入行(Ins)”图标按钮,如下所示:

玖、选拔“数据”选项卡,点击“插入行(Ins)”图标按钮,如下所示:

金沙注册送58 27

金沙注册送58 28

10、在行数据编辑栏里输入两条数据,第一条数据ID为201七、Name为LSB,第3条数据ID为201一、Name为CNC,如下图所示:

十、在行数据编辑栏里输入两条数据,第1条数据ID为201七、Name为LSB,第一条数据ID为201一、Name为CNC,如下图所示:

金沙注册送58 29

金沙注册送58 30

11、添加数码甘休之后,点击“提交(Ctrl+Return)”图标按钮提交刚才输入的两条数据,如下图所示:

1一、添加多少截至之后,点击“提交(Ctrl+Return)”图标按钮提交刚才输入的两条数据,如下图所示:

金沙注册送58 31

金沙注册送58 32

1二、关闭SQLite Studio数据库管理软件。

1二、关闭SQLite Studio数据库管理软件。

五、使用System.Data.SQLite.dll访问SQLite数据库

五、使用System.Data.SQLite.dll访问SQLite数据库

1、新建七个品种名字为“SQLiteTest”的控制台应用程序,如下图所示:

一、新建3个品类名叫“SQLiteTest”的控制台应用程序,如下图所示:

金沙注册送58 33

金沙注册送58 34

二、在“SQLiteTest”项目中右键点击“引用”,在弹出的上下文菜单中选拔“添加引用(奔驰M级)”,如下图所示:

二、在“SQLiteTest”项目中右键点击“引用”,在弹出的上下文菜单中选拔“添加引用(PRADO)”,如下图所示:

金沙注册送58 35

金沙注册送58 36

3、将路径为“C:\Program Files
(x86)\System.Data.SQLite\2010\GAC\System.Data.SQLite.dll”的引用添加进去,如下图所示:

3、将路径为“C:\Program Files
(x86)\System.Data.SQLite\2010\GAC\System.Data.SQLite.dll”的引用添加进去,如下图所示:

金沙注册送58 37

金沙注册送58 38

四、在品种性质设置中,将“生成”选项卡中的靶子平台改为“X8陆”,不然,软件不或者运转,原因是行使的是X八陆版本的System.Data.SQLite.dll,如下图所示:

4、在品种性质设置中,将“生成”选项卡中的目的平台改为“X八陆”,不然,软件不可能运营,原因是采纳的是X捌陆版本的System.Data.SQLite.dll,如下图所示:

金沙注册送58 39

金沙注册送58 40

 

 

伍、在Main主函数里输入以下代码,如下:

伍、在Main主函数里输入以下代码,如下:

using System;
using System.Data.SQLite;
using System.Data;

namespace SQLiteTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SQLiteConnection connection = new SQLiteConnection(@"Data Source = D:\test.db;Password = 2017"))
            {
                using (SQLiteCommand command = new SQLiteCommand(connection)
                { CommandText = "SELECT * FROM [main].[Info]" })
                {
                    DataTable table = new DataTable("Info");
                    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                    adapter.Fill(table);
                    foreach(DataRow row in table.Rows)
                    {
                        foreach(DataColumn col in table.Columns)
                        {
                            Console.Write($"{row[col]}\t");
                        }
                        Console.WriteLine();
                    }
                }
            }
            Console.ReadKey();
        }
    }
}
using System;
using System.Data.SQLite;
using System.Data;

namespace SQLiteTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SQLiteConnection connection = new SQLiteConnection(@"Data Source = D:\test.db;Password = 2017"))
            {
                using (SQLiteCommand command = new SQLiteCommand(connection)
                { CommandText = "SELECT * FROM [main].[Info]" })
                {
                    DataTable table = new DataTable("Info");
                    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                    adapter.Fill(table);
                    foreach(DataRow row in table.Rows)
                    {
                        foreach(DataColumn col in table.Columns)
                        {
                            Console.Write($"{row[col]}\t");
                        }
                        Console.WriteLine();
                    }
                }
            }
            Console.ReadKey();
        }
    }
}

六、运维结果如下:

陆、运维结果如下:

金沙注册送58 41

金沙注册送58 42

 

 

附源代码:

附源代码:

https://pan.baidu.com/s/1bpeXXvx
https://pan.baidu.com/s/1bpeXXvx

相关文章

网站地图xml地图