Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个数据插入数据库时可能存在的风险_C#_Mysql_Client Server - Fatal编程技术网

C# 将多个数据插入数据库时可能存在的风险

C# 将多个数据插入数据库时可能存在的风险,c#,mysql,client-server,C#,Mysql,Client Server,我有一个带有数据库的服务器客户端程序。 客户端将数据发送到服务器,服务器将数据保存到数据库中。 现在的问题是,如果多个客户机同时向服务器发送数据,而服务器希望将数据写入数据库,是否会出现问题 例如: client1调用一个方法: client.save_data(data1); client.save_data(data2); client2调用一个方法: client.save_data(data1); client.save_data(data2); 服务器将尝试: save_dat

我有一个带有数据库的服务器客户端程序。 客户端将数据发送到服务器,服务器将数据保存到数据库中。 现在的问题是,如果多个客户机同时向服务器发送数据,而服务器希望将数据写入数据库,是否会出现问题

例如: client1调用一个方法:

client.save_data(data1);
client.save_data(data2);
client2调用一个方法:

client.save_data(data1);
client.save_data(data2);
服务器将尝试:

save_data(data){
  sql.insert_intoDB(data);
}
insert_intoDB(data)
{
  //not real code, just to show what i mean
   query = "insert into tablename values "+data;
   query.execute;
}
用c#处理这个问题的好方法是什么? 还是根本没有风险


谢谢。如果您只是插入数据,那么就不可能存在并发问题。插入操作按数据库引擎接收的顺序排队并插入,该顺序始终是线性的

有什么问题吗

一般来说,是的,这个问题称为并发性。不同的数据库以不同的方式处理这个问题。在处理更新而不是插入时,它通常更受关注

我认为大多数(如果不是全部的话)数据库引擎都会单独处理每个插入,所以您不必担心它。然而,为了安全起见,您应该始终使用事务,以便在出现任何错误时可以回滚


如果您使用C#,我建议您使用a。

阅读有关事务和锁的内容(如果需要)谢谢。我在谷歌上搜索了这个事务,发现了一个很好的例子:`SqlConnection db=newsqlconnection(“connstrighere”);SqlTransaction;db.Open();事务=db.BeginTransaction();尝试{new SqlCommand(“INSERT INTO TransactionDemo”+“(Text)value('Row1');”,db,transaction.ExecuteNonQuery();transaction.Commit();}catch(SqlException sqlError){transaction.Rollback();}db.Close()`@Manuel看到我更新的答案后,您可能应该更倾向于使用
TransactionScope
,而不是直接使用
Transaction
。它更加灵活,不需要使用
try…catch
块。