gpt4 book ai didi

c# - 我应该在 C# 数据库调用周围放置 lock 语句吗?

转载 作者:行者123 更新时间:2023-11-30 15:05:29 25 4
gpt4 key购买 nike

我正在创建一个类,用作在 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 之前立即执行吗?

非常感谢

最佳答案

为什么要锁定?您没有在您的 dll 代码中使用任何共享资源。

只需捕获您可能会从碰撞中看到的 sql 错误。如果您插入已经存在的内容,那么您可以做任何当时合适的事情。

在代码中保存对共享资源的锁定;多个线程可能会访问您需要确保决定性行为的地方。这段代码看起来就像您只是向数据库发送一些东西,您不会得到任何您无法通过在此处不使用锁来轻松解释的行为。

关于c# - 我应该在 C# 数据库调用周围放置 lock 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com