.NET类似于PHP的PDO吗?

3

我来自PHP,最终我将深入学习NHibernate或Microsoft Entity Framework等技术,但现在我真的只想要像PHP的PDO一样简单的东西来连接数据库:

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

PDO抽象了与数据库的连接(不仅限于sqlite),并提供了一些常用方法来执行预处理语句等。在.NET中是否有类似简单的东西呢?

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

2个回答

7

在.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提供程序,您可以从此处下载
因此,第一步是从上述网站下载.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。 - Hugo Mota
只是添加一些信息:除非在项目属性中指定构建平台目标(例如x86),否则此库将无法在VS的调试模式下工作。 :p - Hugo Mota

0
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`

1
你想解释一下你的代码吗?你可能有正确的答案,但请在回答中也提供一些代码解释。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接