Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3种类型的SQL(没有映射器类型linq或nhibernate)_C#_Sql - Fatal编程技术网

C# 3种类型的SQL(没有映射器类型linq或nhibernate)

C# 3种类型的SQL(没有映射器类型linq或nhibernate),c#,sql,C#,Sql,这3种查询SQL数据的类型之间有什么区别(并不是说odbc可以请求不同的DB) 1.)ODBC dll:Microsoft.Data.ODBC OdbcConnection cn; OdbcCommand cmd; string MyString; MyString="Select ..."; cn= new OdbcConnection("Driver={SQL Server};Server=...;UID=...;PWD=...;Database=...;"); cn.Open(); cm

这3种查询SQL数据的类型之间有什么区别(并不是说odbc可以请求不同的DB)

1.)ODBC dll:Microsoft.Data.ODBC

OdbcConnection cn;
OdbcCommand cmd;
string MyString;

MyString="Select ...";
cn= new OdbcConnection("Driver={SQL Server};Server=...;UID=...;PWD=...;Database=...;");
cn.Open();
cmd=new OdbcCommand(MyString,cn);
OdbcDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    ....
}

reader.Close();
cn.Close();
第二个dll:System.Data.SqlClient

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["…"].ConnectionString);           
SqlDataReader rdr = null;

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT ..."

cmd.CommandType = CommandType.Text;
conn.Open();
rdr = cmd.ExecuteReader();              

while (rdr.Read())
{
   .....
}
rdr.Close();
conn.Close();
第三个:dll:Microsoft.Practices.EnterpriseLibrary.Data

Database context = DatabaseFactory.CreateDatabase("..."); 
IDataReader dataReader = context.ExecuteReader(CommandType.Text,"SELECT ...")

dataReader.Read();
var inputid = (int)dataReader["..."];
  • ODBC驱动程序是ODBC的一种包装器,即本机db连接上的包装器
  • SqlConnection是与MSSQL服务器AFAIK交谈的最直接方式
  • DatabaseFactory只是一个工厂(ehm…),当您与MSSQL服务器交谈时,它最终使用SqlConnection

Microsoft.Practices.EnterpriseLibrary.Data
System.Data.SqlClient
的包装器,因此它为内置的
SqlClient
功能添加了一些细节。正如@Felice Pollano所说,ODBC驱动程序包装了本机DB连接,因此我倾向于避免使用它们。

  • ODBC是一种非常古老、早已过时的DB访问标准-除非您必须使用,否则不要使用它。(在20世纪90年代左右,它是“时髦的”)

  • <>强> SQLClient 是.NET裸骨ADO.NET访问SQL Server数据库的级别,也是所有其他技术的基础。它基本上可以对SQL Server执行您需要执行的任何操作—运行数据查询、运行DDL查询、执行存储过程等等。这是相当基本和简单的,例如,你必须自己键入大量重复的、枯燥的代码

  • EnterpriseLibrary.Data是ADO.NET之上的一个层,它通过为您处理一些重复代码简化了常见任务


在ADO.NET基础之上有附加的东西——比如NHiBernter、实体框架等等——但是<强> SQLClient /ADO.NET实际上是当前.Net Works/P>中所有当前、现代数据库访问(基本上是SQLServer)的基础,我将避免ODBC,另一方面,这取决于您是否正在创建一个非常简单的应用程序,该应用程序将以MSSQL为目标,或者您是否计划更改数据库引擎,并且您的应用程序将成为一个真实世界的产品,在这种情况下,需要EF,或者您自己的数据库连接工厂。