[英]Writing less code in ADO.NET (wrapper classes)
所以总的来说,我对 C# 还是很陌生,但我目前对该语言有基本的了解。
在访问 SQL 数据库时,我决定使用 ADO.NET (SqlClient 似乎是最好的方法,我已经设法让它工作,包括使用查询。我的问题是,一旦我开始查询数据库更频繁,我似乎只是一遍又一遍地重写非常相似的代码(这显然是不好的做法).很明显,我需要制作某种 class 来处理我对 ADO.NET (SqlClient) 的使用所以我不能只是键入如下内容:
DatabaseConnection.Query("SELECT * FROM tblProducts");
… 代替...
using (SqlConnection cnn = new SqlConnection(cnnString)) // cnnString was defined earlier in the code
{
SqlCommand cmd = new SqlCommand("SELECT ProductType FROM tblProductTypes", cnn);
DataTable dt = new DataTable();
cnn.Open();
dt.Load(cmd.ExecuteReader());
cboFilterTypes.DataSource = dt;
cboFilterTypes.DisplayMember = "ProductType";
cboFilterTypes.ValueMember = "ProductType";
cnn.Close();
}
所以我认为我需要制作一个 class 包装器(至少我认为它是这样称呼的),但我不太清楚如何 go 来做这件事。 有没有人有任何我可以使用的建议或技巧?
需要明确的是,我不想使用实体框架或基于 ADO.NET 构建的类似框架 - 我尝试过实体框架并认为存在太多缺点。
坚持您对“包装器”的要求,您可以简单地制作一个 static 辅助方法来处理对数据库的调用,例如
public static DataTable GetDataTable(string query)
{
DataTable result = new DataTable();
using (SqlConnection cnn = new SqlConnection(cnnString)) // cnnString was defined earlier in the code
{
SqlCommand cmd = new SqlCommand(query, cnn);
result = new DataTable();
cnn.Open();
result.Load(cmd.ExecuteReader());
cnn.Close();
}
return result;
}
然后你可以这样称呼
cboFilterTypes.DataSource = GetDataTable("SELECT ProductType FROM tblProductTypes")
cboFilterTypes.DisplayMember = "ProductType";
cboFilterTypes.ValueMember = "ProductType";
除了小型项目之外,我不会推荐这种数据访问方式。 如果你真的不喜欢 EF,那么 Dapper 或类似的东西提供了一个更具可扩展性的解决方案。 Stackoverflow 本身使用 Dapper :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.