C#数据库访问:用于获取数据的最佳方法

时间:2011-12-19 10:53:29

标签: c# database asp.net-mvc-3 dll

我问的原因是,原来所有的参考文献和例子都指向方法2。

但是方法1似乎在如此少的代码中做得更多。肯定是它的

  1. 整洁,
  2. 更好
  3. 更易于阅读/关注
  4. 并具有将DBNulls转换为null的功能。而不是拥有 自己动手。
  5. 处理连接/数据读取器的打开和关闭。
  6. 我无法想到方法2使用方法1的任何原因。

    (方法2可能有一个using子句,但是由于代码太多,它被放在一个单独的函数中,可以从其他地方调用,因此关闭它会关闭数据头,使数据无法访问。)

    无论如何,我正在认真考虑回头并改变整个网络服务以使用方法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 个答案:

答案 0 :(得分:9)

尝试使用entity framework

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

答案 1 :(得分:3)

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

方法2确实可以做一些事情来减少代码,但如果你想要更好地控制你的连接,你只需要方法2。

正如Djoul6建议您也可以使用实体框架。我比其他一切更喜欢EF。即使它稍微受到性能影响,但是在如此短的时间内可以推出的代码量以及增加的安全性(SQL注入)等等也是值得的。