2011-12-19 68 views
2

我想问的原因是,origionally所有引用和实例对方法2C#数据库访问:最好的方法用于获取数据

指出,但方法1似乎少了这么多的代码做这么多。当然它的

  1. 整洁,
  2. 更好
  3. 更易于阅读/遵循
  4. 和具有的功能,如转换DBNulls为null。而不是让自己做 。
  5. 处理连接/数据读取器的打开和关闭。

我不能用以上方法想不出什么原因2种方法1.

(方法2很可能有使用条款,但由于这么多的代码,它被放置在一个单独的功能是因此关闭数据记录器使得数据不可访问)。

无论如何,我认真考虑回去并改变我的整个webservice以使用方法1,因为它看起来好多了,可以维护。任何人都可以建议吗?

方法1:

using (var db = Database.OpenConnectionString(Library.Properties.Settings.Default.dbConnString, "System.Data.SqlClient")) 
     { 
      Int32 AccNo = db.QuerySingle("SELECT AccNo FROM Tasks WHERE TaskID = " + TaskID); 
     } 

方法2:

 sqlComm = new SqlCommand(); 
     sqlCon = new SqlConnection(); 
     sqlComm.Connection = sqlCon; 

     sqlCon.ConnectionString = global::Library.Properties.Settings.Default.dbConnString; 
     sqlComm.CommandText = "SELECT AccNo FROM Tasks WHERE TaskID = " + TaskID; 
     sqlCon.Open(); 
     SqlDataReader data = sqlComm.ExecuteReader(); 
     while (data.Read()) 
     { 
      Int32 AccNo = (Int32)data["AccNo"]; 
     } 
     sqlCon.Close(); 
     sqlComm.Dispose(); 
     if (data != null) 
      data.Close(); 
+2

对于这两种方法,我建议使用参数与你的SqlCommand。 – 2011-12-19 10:56:08

+0

为了防止sql攻击?我会考虑它:) – Doomsknight 2011-12-19 10:58:03

+1

顺便说一句:SqlCommand也有一个'ExecuteScalar'方法,以获得一个单一的值。 – 2011-12-19 11:02:23

回答

9

尝试使用entity framework

using (var context = new YourDatabaseEntities()) 
{ 
    var elements = (from c in context.YourTable where c.TaskId == taskId select c); 
} 
+1

或者你可以使用LINQ到SQL,如果你只是想运行简单的SQL查询和SP – 2011-12-19 11:00:42

+0

你能elaberate对这种过度方法1.他们基本上遵循同样的模式带来的好处。 (using语句,其次是一个SQL LIKE语句将收购数据) – Doomsknight 2011-12-19 11:10:49

+0

有两种方法具有几乎相同的模式,但与EF你不查询,直接注入你的参数,它也将通过管理DB Null值使用可为空的属性,以及其他一些优点! – Djoul6 2011-12-19 11:53:44

3

方法1看起来在我看来好得多。

方法2确实有一些事情可以做,以减少的代码,但你只会想方法2,如果你想你的连接的更大的控制权。

由于Djoul6建议你可以使用实体框架为好。我更喜欢EF。尽管需要轻微的性能下降,但在很短的时间内增加的安全性(SQL注入)和其他许多功能是值得的。

+0

谢谢,很好的回答:) – Doomsknight 2011-12-19 11:08:45

相关问题