【发布时间】:2014-09-17 12:20:32
【问题描述】:
我正在开发一个从 MSSQL 数据库中获取一些信息的工具。有自己的数据库 访问的用户。我知道静态是如何工作的以及何时应该使用它们,但在这种情况下我不确定。
我有一个自己的数据库类:
class Database
{
private const String connString = "the connection string";
private const String query1 = "";
public Database()
{
// some initialization
}
// some different methods which calls CreateCommand and a queryString and
// returns the result
private static void CreateCommand(string queryString, string connectionString)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand command = new SqlCommand(queryString, sqlConnection))
{
using (SqlDataReader dataReader = command.ExecuteReader())
{
if (dataReader != null)
{
while (dataReader.Read())
{
}
}
}
}
}
}
}
只有选择查询,我从服务器获取数据。一个自己的线程将调用一些数据库方法,例如每小时显示结果。 我应该为此使用静态类和静态方法,还是只使用 createCommand 方法静态或没有静态方法的普通类?
亲切的问候
【问题讨论】:
-
你对你的项目进行单元测试吗?如果是,请不要使用静态方法。它们使测试变得困难。
-
这是为了教育目的吗?如果没有,我建议您使用许多现有 ORM 之一:Entity Framework、NHibernate、Dapper、...
-
@Belogix 那你有什么建议?你知道连接池吗?
-
@Belogix,这不是真的。但默认 ADO.NET 将使用相同的连接字符串汇集连接,保持和重用现有连接,而不是为每个查询设置和拆除。 msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx
-
好的,谢谢,我让它不是静态的,因为我完全同意你的观点。 @Belogix 在我找到使用解决方案之前,我的想法是创建数据库类,在该类中我在构造函数中创建 sqlconnection 的实例,然后为语句创建方法和一种用于打开连接的方法用于关闭。有了这个,我必须在我的线程类中创建一个数据库类的实例,然后打开连接,进行不同的查询,然后关闭。我认为使用多个命令的 SqlTransactions 是可能的吗?只是一个问题,我的项目中不需要事务。
标签: c# sql .net sql-server static