Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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# SqlServer类静态方法-线程安全_C#_Thread Safety_Static Methods - Fatal编程技术网

C# SqlServer类静态方法-线程安全

C# SqlServer类静态方法-线程安全,c#,thread-safety,static-methods,C#,Thread Safety,Static Methods,我创建了一个类来简化我的应用程序中SQL server的使用 公共静态类SqlServer { 公共静态void QueryNoReturn(字符串连接字符串、字符串查询、SqlParameter[]参数、bool IsStoredProcess) { 使用(SqlConnection conn=newsqlconnection(ConnectionString)) { //创建要运行的命令 SqlCommand=newsqlcommand(查询,连接); //如果我们正在运行存

我创建了一个类来简化我的应用程序中SQL server的使用

公共静态类SqlServer
{        
公共静态void QueryNoReturn(字符串连接字符串、字符串查询、SqlParameter[]参数、bool IsStoredProcess)
{
使用(SqlConnection conn=newsqlconnection(ConnectionString))
{
//创建要运行的命令
SqlCommand=newsqlcommand(查询,连接);
//如果我们正在运行存储过程
if(ISStoredProcess)
command.CommandType=System.Data.CommandType.StoredProcess;
//添加参数(如果存在)
if(参数!=null)
command.Parameters.AddRange(参数);
尝试
{
//打开与数据库的连接
conn.Open();
//执行命令并指定给结果对象
command.ExecuteNonQuery();
康涅狄格州关闭();
command.Parameters.Clear();
}
捕获(SqlException sqlex)
{
抛出新异常(
string.Format(“{0}\”{1}\”,IsStoredProcedure?“过程”:“查询”,查询),
sqlex);
}
}
}
}
如果我每秒多次调用这个静态方法(大约50次),那么我会看到线程安全问题吗


我可以很容易地创建一个
工厂
或其他特定于实例的对象,但出于简单性考虑,我选择了这个选项。

否。当您访问共享资源时,您可能会遇到线程安全问题,但您不会这样做(至少在这种方法中不会)


顺便说一下,移动
conn.Close()
finally
子句,这样连接就关闭了,即使您遇到异常。

由于您没有使用类的任何共享资源,这看起来是“线程安全的”

当然,这忽略了数据库本身的任何并发性问题

您还应该使用语句将
SqlCommand
创建包装在

由于您正在使用
语句在
中创建
SqlConnection
,因此不需要显式地对其调用
Close
,因为在处理连接时会这样做。

注释“//执行命令并分配给结果对象”已中断(此处没有分配发生)