【问题标题】:.NET's similar to PHP's PDO?.NET 类似于 PHP 的 PDO?
【发布时间】:2012-12-11 12:10:42
【问题描述】:

我来自 PHP,最终我将深入研究 NHibernate 或 Microsoft Entity Framework 之类的东西,但现在我真的很喜欢 PHP 的 PDO 等简单的东西,用于连接到数据库:

$db = new PDO('sqlite:database');
$db->exec('delete from users');

PDO 抽象了数据库上的连接(不管它是什么,而不仅仅是 sqlite),并提供了一些常用的方法来执行准备好的语句和东西。 .NET 中有这么简单的东西吗?

obs:我刚开始使用 C#,所以如果您可以非常具体地说明如何将库链接到项目或其他设置步骤(如果需要),我将不胜感激(:〜我正在使用 VS2012

【问题讨论】:

    标签: c# php database pdo


    【解决方案1】:

    在 .NET 中,允许您查询关系数据库的技术称为 ADO.NET。例如:

    using (var conn = new SQLiteConnection("Your connection string comes here"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "DELETE * FROM users";
        cmd.ExecuteNonQuery();
    }
    

    在此示例中,我使用了 SQLite 的 ADO.NET 提供程序,您可以使用 download from here

    因此,第一步是让您从上述网站下载 .NET 的托管提供程序。

    下一步是通过右键单击解决方案资源管理器中的“引用”节点并选择程序集来引用项目中的 System.Data.SQLite.dll 程序集。请小心,因为 SQLite 有 x86 和 x64 程序集,因此请确保选择最适合您的目标架构的程序集。

    一旦您引用了程序集,我在示例中展示的覆盖 ADO.NET 基类的 SQLiteConnection 类型将可用于您的代码,您可以直接使用它来查询数据库。引用程序集后,不要忘记在文件中添加 using System.Data.SQLite; 指令以将这些类纳入范围。

    如果您不想经历下载、提取等所有痛苦... SQLite 依赖项,您只需安装可用的System.Data.SQLite NuGet

    了解 ADO.NET 的工作原理是了解未来 NHibernate 和 Entity Framework 等 ORM 框架如何工作的基础,因此从基础开始非常重要。

    【讨论】:

    • 这比我希望的还要好。这个 nuGet 东西太棒了:D
    • 只是添加一些信息:除非您在项目属性中指定构建平台目标(例如 x86),否则此库将无法在 VS 的调试模式下工作:p
    【解决方案2】:
    PDO in dotNET
    [enter link description here][1]
      [1]: https://www.nuget.org/packages/SDO_dotNET/1.0.2
    
    
        The SDO_dotNET Class Library is a high level wrapper around the ODBC, OLEDB, SQLServer and SQLite.
    
    Example:
    using SqlDB;
    
    /******************************************************************
    Sql Server
    *******************************************************************/
    
    string server      = @"INSTANCE\SQLEXPRESS";
    string database = "DEMODB";
    string username = "sa";
    string password = "";
    
    string connectionString = @"Data Source=" + server + ";Initial Catalog=" + database + "; Trusted_Connection=True;User ID=" + username + ";Password=" + password + "";
    SDO db_conn = new SDO(connectionString);
    
    Console.WriteLine("isConnected: " + db_conn.isConnected());
    if (db_conn == null || !db_conn.isConnected())
    {
        Console.WriteLine("Connessione non valida.");
        return;
    }
    
    string sql = "SELECT ID, Message FROM Logs ORDER BY IDLic;";
    DataTable dtLogs = db_conn.SelectTable(sql);
    
    if (dtLogs == null || dtLogs.Rows.Count == 0)
        return;
    
    // Loop with the foreach keyword.
    foreach (DataRow dr in dtLogs.Rows)
    {
        Console.WriteLine("Message: " + dr["Message"].ToString().Trim());
    }
    
    
    
    /******************************************************************
    SQLite
    *******************************************************************/
    
    string database = @"C:\Users\Utente\mydb.sqlite";
    
    string connectionString = @"Data Source=" + database + "; Version=3; New=True; Compress=True;"; // local
    SDO db_conn = new SDO(connectionString);
    
    Console.WriteLine("isConnected: " + db_conn.isConnected());
    if (db_conn == null || !db_conn.isConnected())
    {
        Console.WriteLine("Connessione non valida.");
        return;
    }
    
    string sql = "SELECT firstname, surname FROM users ORDER BY firstname;";
    DataTable dtLogs = db_conn.SelectTable(sql);
    
    if (dtLogs == null || dtLogs.Rows.Count == 0)
        return;
    
    // Loop with the foreach keyword.
    foreach (DataRow dr in dtLogs.Rows)
    {
        Console.WriteLine("Name: " + dr["firstname"].ToString().Trim() + " " + dr["surname"].ToString().Trim());
    }`enter code here`
    

    【讨论】:

    • 您想解释一下您的代码吗?你可能是一个正确的答案,但也请提供你的代码的一些解释和答案。
    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2011-11-07
    相关资源
    最近更新 更多