小编R. *_* S.的帖子

在C#SQLCLR中更改静态只读变量是否安全?

我在安全级别=的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.所以,我想,但不确定,这将导致数据竞争条件.

换一种说法:

  1. static read-onlySQLCLR中的变量是否对每个sql连接/ sql查询/事务都是唯一的,或者它们是否在不同的SQLCLR过程调用之间共享数据?

  2. 是否有可能拥有无痛的全局状态,不受其他SQLCLR程序调用的影响?

.net c# sql-server sqlclr

8
推荐指数
1
解决办法
521
查看次数

标签 统计

.net ×1

c# ×1

sql-server ×1

sqlclr ×1