2

目前正在开发一个 ASP.NET Web 应用程序,并开始意识到我正在一遍又一遍地编写相同的样板代码..

IE

        SqlDataReader myReader = null;
        SqlCommand SQLcmd = new SqlCommand();
        SqlConnection SQLConn = new SqlConnection();
        String SQLStatement = "Select this 'nd That";
        SQLConn.ConnectionString = SQLConnectionString;
        SQLConn.Open();
        SQLcmd.Connection = SQLConn;
        SQLcmd.CommandText = SQLStatement;
        myReader = SQLcmd.ExecuteReader();
        while (myReader.Read())
        {
            //Do some awesome
        }
        SQLConn.Close();
    }

.NET 世界现在如何使用 SQL?

基本上我怎么能不花半天时间复制和粘贴该代码?

每个人都在使用 Linq to SQL 吗?如果是这样,请指点我一个教程!

非常感谢!

丹尼尔

4

4 回答 4

2

这些天的一般情绪是使用某种ORM

流行的选择是:

Linq2Sql 确实是一个 ORM,但微软内部不再积极开发它。

于 2010-10-14T14:54:20.253 回答
1

使用 ORM。要了解有关 ORM 的更多信息,请访问http://en.wikipedia.org/wiki/Object-relational_mapping。.Net 的一些选择是:

  • NHibernate:最强大的一个,但具有深度学习曲线。免费和开源。
  • 实体框架:EF1 不是很有前途 但似乎微软正在大力投资它,因为 EF4 非常强大。既然你提到了 ASP.Net 4,我建议你看看 EF4。
  • SubSonic具有快速的学习曲线。便于使用。最适合中小型应用程序 IMO。免费和开源。

最著名的商业 ORM 是Active RecordLLBLGen(它有自己的 ORM,也是一个 OR-Mapping 生成器)、DevForce(对于少于 10 个表的数据库免费)
你可能想看看这篇博文以了解可用的最著名的 ORM 列表。

于 2010-10-14T15:15:41.917 回答
1

我不会告诉你使用 ORM,而是向你展示我是如何做到的(从记忆中输入)(我将被降级和引火,谁知道还有什么):

我看你做我做的,即:

    SqlDataReader myReader = null;
    SqlCommand SQLcmd = new SqlCommand();
    SqlConnection SQLConn = new SqlConnection();
    String SQLStatement = "Select this 'nd That";
    SQLConn.ConnectionString = SQLConnectionString;
    SQLConn.Open();
    SQLcmd.Connection = SQLConn;
    SQLcmd.CommandText = SQLStatement;
    myReader = SQLcmd.ExecuteReader();
    while (myReader.Read())
    {
        //Do some awesome
    }
    SQLConn.Close();
}

所以我做了类似的事情。请注意,您正在创建新的 SqlCommand、新的 SqlConnection,并且您正在使用一个通用的 SqlConnectionString(您需要能够从中心位置重新加载它,是吗?)所以我这样做:

public class Global{
  public string ConnectionString {get;set;} 
  public Global(){
    ConnectionString = //load from wherever, this allows me to reload it later, via API? ;)
  }
  public SqlCommandFactory(string sprocName, SqlConnection con){
    return new SqlCommand{
      CommandText = sprocName,
      Connection = con,
      CommandTimeout = 0,
      ConnectionTimeout = 0,
      CommandType = StoredProcedure
    };
  }
}

//in my other class that uses this code:
public List<string> /* for simplicity sake, strigns */ GetListOfStringsFromDatabase(){
  List<string> returnValue = new List<string>();

  // use of using ensures that I don't forget to clean something up here!!!!
  using ( SqlConnection con = new SqlConnection(Global.ConnectionString) ) {
    SqlCommand cmd = Global.SqlCommandFactory("mysproc", con);
    cmd.Parameters.Add( "@param1", SqlDbType.VarChar ).Value = "somestring";

    con.Open();
    using ( SqlDataReader reader = cmd.ExecuteReader() ) {
      while (reader.Read()) {
        returnResult.Add( reader[0].ToString() );
      }
    }
  }

return returnValue;
}

但是 ORM 可能会更好。只是我们觉得不适合我们的情况。

于 2010-10-14T15:49:17.530 回答
0

没有“单一”的方式。有些人使用 Linq to sql,有些人使用 Entity Framework,有些人使用 nHibernate,有些人使用 Enterprise Library 数据块,等等……这一切都取决于您的需求和您的感受。

于 2010-10-14T14:54:39.617 回答