C# SqlServer类静态方法-线程安全
我创建了一个类来简化我的应用程序中SQL server的使用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(查询,连接); //如果我们正在运行存
公共静态类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
,因为在处理连接时会这样做。注释“//执行命令并分配给结果对象”已中断(此处没有分配发生)