Pra*_*bhu 0 c# sql-server sql-server-2005 sql-server-2008
我编写了以下代码(sql clr存储过程),它将消息写入本地文件.当多个连接同时调用存储的proc时,会发生此问题.所以我使用了锁定语句.但这似乎没有任何区别?我在这做错了什么?
lock (SqlContext.Pipe)
{
StreamWriter sw = File.AppendText("C:\Date.txt");
int y = 50;
while (y != 0)
{
sw.WriteLine(DateTime.Now + " " + serverName + " -- " + jobId.ToString() );
System.Threading.Thread.Sleep(new Random().Next());
y = y - 1;
}
sw.Close();
}
Run Code Online (Sandbox Code Playgroud)
锁定语句本身并不保护任何东西.只有当所有线程都锁定同一个对象时才会发生魔力.在您的情况下,每个线程锁定自己的上下文管道,行为将与锁定相同或不相同.
此外,CLR程序可以在SQL内部完成所有损坏,劫持SQL工作者在Sleep()中等待绝对是一个顶级攻击者.我希望你只将它用于实验目的.
实现你可能想要的,即.只有一个程序随时执行,使用应用程序锁:sp_getapplock.在T-SQL sp_getapplock/中包装CLR过程调用sp_releaseapplock,或者sp_getapplock从CLR代码执行上下文连接(并在出路时执行sp_releaseapplock).
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |