【发布时间】:2012-01-30 11:52:05
【问题描述】:
我正在创建一个类,用作在 SQL Server 数据库中读取、插入和更新值的门户。该类实现了单例设计模式,因此任何时候都只会有一个该类的实例。
此类对数据库值的每个操作(读取、写入和删除)都有单独的方法,每个方法都将打开一个 SQLConnection,创建、填充和执行 SQLCommand,最后在完成后关闭连接。
这是添加值的示例:
public void AddGlossaryValue(string name, string value)
{
SqlConnection connection = null;
SqlCommand command = null;
try
{
connection = new SqlConnection(connectionString);
connection.Open();
command = new SqlCommand(SQL_INSERT_COMMAND, connection);
command.Parameters.Add("@name", SqlDbType.NVarChar, 50);
command.Parameters.Add("@value", SqlDbType.NVarChar, 50);
command.Parameters["@name"].Value = name;
command.Parameters["@value"].Value = value;
command.ExecuteNonQuery();
}
catch (Exception ex)
{
// handle exception - omitted in this example because it's irrelevant
}
finally
{
try
{
connection.Close();
}
catch (Exception) { }
}
}
我来自 Java 背景,通常您会将此类方法声明为 Synchronized,这意味着该方法在任何时候都只能从一个源执行。从我对 C# 的研究来看,实现这一点的典型方法似乎是锁定和对象。
但是,我的问题是,在上述情况下是否建议这样做,如果是,锁定对象应该放在哪里?是否会在创建 SQLConnection 之前立即进行?
非常感谢
【问题讨论】:
-
忠告:您可以将数据库连接放在
using块中,而不是try/finally。 -
感谢您的建议,会做的