从 C 连接和使用 sqlite 数据库的最佳方式是什么#

What is the best way to connect and use a sqlite database from C#

提问人:Richard Gourlay 提问时间:8/25/2008 最后编辑:Richard Gourlay 更新时间:8/19/2023 访问量:132989

问:

我以前在 C++ 中通过包含 sqlite.h 来做到这一点,但是在 C# 中是否有类似的简单方法?

C# SQLite

评论

3赞 Stewart Johnson 9/24/2008
这是这个问题的重复:stackoverflow.com/questions/93654/...,并且有不同的答案。
0赞 Jonathan Hall 7/17/2017
是否有用于 SQLite 的 .NET/C# 包装器的可能副本?

答:

6赞 robintw 8/25/2008 #1

http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers 上有一个 .Net 的 Sqlite 包装器列表。据我所知,http://sqlite.phxsoftware.com/ 相当不错。这个特殊的数据库允许您通过 ADO.Net 访问 Sqlite,就像任何其他数据库一样。

48赞 Espo 8/25/2008 #2

Microsoft 的 Microsoft.Data.Sqlite 每天有超过 9000 次下载,所以我认为你使用它是安全的。

文档中的示例用法:

using (var connection = new SqliteConnection("Data Source=hello.db"))
{
    connection.Open();

    var command = connection.CreateCommand();
    command.CommandText =
    @"
        SELECT name
        FROM user
        WHERE id = $id
    ";
    command.Parameters.AddWithValue("$id", id);

    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var name = reader.GetString(0);

            Console.WriteLine($"Hello, {name}!");
        }
    }
}
12赞 bvanderw 8/28/2008 #3

我已经成功地使用了它:

https://system.data.sqlite.org/

免费,没有任何限制。

5赞 xanadont 8/7/2009 #4

现在还有这个选项: http://code.google.com/p/csharp-sqlite/ - SQLite 到 C# 的完整移植。

82赞 DA. 8/10/2009 #5

我和布鲁斯在一起。我也在使用 http://system.data.sqlite.org/,取得了巨大的成功。这是我创建的一个简单的类示例:

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

namespace MySqlLite
{
      class DataClass
      {
        private SQLiteConnection sqlite;

        public DataClass()
        {
              //This part killed me in the beginning.  I was specifying "DataSource"
              //instead of "Data Source"
              sqlite = new SQLiteConnection("Data Source=/path/to/file.db");

        }

        public DataTable selectQuery(string query)
        {
              SQLiteDataAdapter ad;
              DataTable dt = new DataTable();

              try
              {
                    SQLiteCommand cmd;
                    sqlite.Open();  //Initiate connection to the db
                    cmd = sqlite.CreateCommand();
                    cmd.CommandText = query;  //set the passed query
                    ad = new SQLiteDataAdapter(cmd);
                    ad.Fill(dt); //fill the datasource
              }
              catch(SQLiteException ex)
              {
                    //Add your exception code here.
              }
              sqlite.Close();
              return dt;
  }
}

还有一个 NuGet 包:System.Data.SQLite 可用。

评论

9赞 Fil 7/28/2017
“数据源=/path/to/file.db;New=False;”如果您不想每次都丢失所有数据和表
1赞 Sracanis 12/28/2017
它在 VS 2017 中不起作用。它显示以下错误:未处理的异常:System.BadImageFormatException:无法加载文件或程序集“System.Data.SQLite,Version=1.0.79.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139”。试图加载格式不正确的程序。在ConsoleApp1_del2。Program.Main(字符串[] 参数)
1赞 lmat - Reinstate Monica 7/26/2012 #6

Mono 带有一个包装器,使用他们的包装器!

https://github.com/mono/mono/tree/master/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0 提供了以.net友好方式包装实际SQLite dll(http://www.sqlite.org/sqlite-shell-win32-x86-3071300.zip 在下载页面 http://www.sqlite.org/download.html/ 中找到)的代码。它适用于 Linux 或 Windows。

这似乎是所有世界中最薄的,最大限度地减少了您对第三方库的依赖。如果我必须从头开始做这个项目,我会这样做。

3赞 Bronek 8/30/2012 #7

在 NET Framework 中使用 SQLite 数据库的另一种方法是使用 Fluent-NHibernate
[它是NET模块,它包装了NHibernate(ORM模块 - 对象关系映射),并允许使用流畅的模式以编程方式(没有XML文件)配置NHibernate。

以下是如何在 C# 中逐步执行此操作的简短“入门”说明:

https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started

它包括作为 Visual Studio 项目的源代码。

5赞 xanadont 6/20/2013 #8

https://github.com/praeclarum/sqlite-net 现在可能是最好的选择。

0赞 floyd70s 10/6/2020 #9

如果你对库有任何问题,你可以使用Microsoft.Data.Sqlite;

 public static DataTable GetData(string connectionString, string query)
        {
            DataTable dt = new DataTable();
            Microsoft.Data.Sqlite.SqliteConnection connection;
            Microsoft.Data.Sqlite.SqliteCommand command;

            connection = new Microsoft.Data.Sqlite.SqliteConnection("Data Source= YOU_PATH_BD.sqlite");
            try
            {
                connection.Open();
                command = new Microsoft.Data.Sqlite.SqliteCommand(query, connection);
                dt.Load(command.ExecuteReader());
                connection.Close();
            }
            catch
            {
            }

            return dt;
        }

可以添加 NuGet 包 Microsoft.Data.Sqlite

3赞 ali asghar tofighian 12/29/2020 #10

在这里,我试图帮助你一步一步地完成这项工作:(这可能是其他问题的答案)

  1. 转到此地址,在页面下方,您可以看到类似“发布包列表”的内容。根据您的系统和 .net framework 版本,选择适合您的版本。例如,如果要在 64 位 Windows 上使用 .NET Framework 4.6,请选择此版本并下载它。
  2. 然后将文件安装在硬盘驱动器上的某个位置,就像任何其他软件一样。
  3. 打开 Visual Studio 和项目。然后在解决方案资源管理器中,右键单击“引用”并选择“添加引用...”。
  4. 单击浏览按钮并选择安装上一个文件的位置,然后转到 .../bin/System.Data.SQLite.dll,然后单击添加,然后单击确定按钮。

差不多就是这样。现在,您可以在项目中使用 SQLite。 要在代码级别的项目中使用它,您可以使用以下示例代码:

  1. 创建连接字符串:

    string connectionString = @"URI=file:{the location of your sqlite database}";

  2. 建立SQLite连接:

    SQLiteConnection theConnection = new SQLiteConnection(connectionString );

  3. 打开连接:

    theConnection.Open();

  4. 创建一个 SQLite 命令:

    SQLiteCommand cmd = new SQLiteCommand(theConnection);

  5. 制作一个命令文本,或者更好地说出你的SQLite语句:

    cmd.CommandText = "INSERT INTO table_name(col1, col2) VALUES(val1, val2)";

  6. 执行命令

    cmd.ExecuteNonQuery();

就是这样。