我在安全级别=的C#6.0 .NET 3.5 CLR程序集中编写了一些代码external_access.
减少代码:
public static readonly DataTable warnings_table = init_warnings_table();
public static void set_warning(string msg)
{
var row = warnings_table.NewRow();
row[1] = DateTime.Now;
row[2] = msg;
...
warnings_table.Rows.Add(row);
}
[Microsoft.SqlServer.Server.SqlProcedure]
public static SqlInt32 wrapper_func(SqlInt32 param)
{
return big_func(Param.Value);
}
int big_func(int param)
{
SqlBulkCopy bulkcopy;
....
set_warning("Message");
....
write_warnings(bulkcopy);
warnings_table.Clear();
}
Run Code Online (Sandbox Code Playgroud)
warnings_table如果wrapper_func将同时从2个或更多个不同的连接/会话中调用,将会发生什么?静态字段有写操作warnings_table.所以,我想,但不确定,这将导致数据竞争条件.
换一种说法:
static read-onlySQLCLR中的变量是否对每个sql连接/ sql查询/事务都是唯一的,或者它们是否在不同的SQLCLR过程调用之间共享数据?
是否有可能拥有无痛的全局状态,不受其他SQLCLR程序调用的影响?