c# - 如何使用 Web 服务在没有竞争条件的情况下写入数据库?

标签 c# mysql web-services web

我用 C# 编写了一个简单的 Web 服务 (asmx)

客户端使用 post 和 title 参数访问 web 服务,并期望该服务返回一个对象,其中包含有关该 title 键的更多详细信息。

我面临的问题是,在我的网络服务执行开始时,我检查提供给我的标题是否存在于我的数据库中。如果不是我构建正确的对象,我将它保存到我的数据库中以备将来搜索,以避免重建它(因为我使用第三方 web 服务进行构建),然后我在 json 中发回客户端询问的对象为。

然而,这会导致竞争情况,因为 2 个客户端可能会请求相同的标题并最终将同一个对象插入数据库两次,因为其中一个客户端的速度不够快,无法在另一个客户端请求之前写入该对象。

我使用 Mysql 数据库,我想知道如何避免这种竞争情况?

key是存储过程吗?

我该如何解决这个问题?

注意:我的数据库中的键是标题列和年份列。

提前致谢

最佳答案

您可以在列上添加 SQL Server UNIQUE 约束以强制唯一性。如果出现竞争条件,您可以通过捕获并简单地再次查询标题来处理服务代码中的错误(来自约束)。

关于c# - 如何使用 Web 服务在没有竞争条件的情况下写入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771630/

相关文章:

python - 如何使用 SQLAlchemy 只创建一张表?

php - 如何使用 Laravel 为不同的客户使用不同的数据库?

ASP.Net 哪个用户帐户在 IIS 7 上运行 Web 服务?

web-services - 303 响应正文中的超链接

c# - 护照号码的正则表达式

c# - unity 角色的跳跃和下降超过我输入的值

Mysql批量替换多个表的特定值

web-services - 使用 JUnit 测试 Web 服务

c# - 在 .Net Core 2.0 中从网络摄像头捕获图像

c# - C++/CLI 应用程序是否比 C# 应用程序更安全?