gpt4 book ai didi

c# - CLR Stored Procedure需要一个Sql Server执行线程

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:24 25 4
gpt4 key购买 nike

我有一个 CLR 触发器,它使用 BeginInvoke 调用存储过程。在存储过程中,我尝试调用 SqlComman,但我得到:请求的操作需要 Sql Server 执行线程。当前线程由用户代码或其他非 Sql Server 引擎代码启动。

我必须在 SP 中执行此操作,并且由于等待,我必须使用 BeginInvoke 调用 SP。

代码:

[SqlProcedure()]
public static void MySendData( String crudType, String sourceTable, ... ) {
SqlCommand sqlDeleteComm;

String temp = String.Empty;

using( SqlConnection conn = new SqlConnection( "context connection=true" ) ) {

sqlDeleteComm = new SqlCommand( "DELETE FROM #TEMP_TABLE" );
sqlDeleteComm.Connection = conn;

try {
conn.Open();
sqlDeleteComm.ExecuteNonQuery();
conn.Close();
} catch( Exception ex ) {
// --- here ---
// The requested operation requires a Sql Server execution thread. The current thread was started by user code or other non-Sql Server engine code.
}
}
...
}

[Microsoft.SqlServer.Server.SqlTrigger( Name = "MyTrigger", Target = "MyTable", Event = "FOR UPDATE, INSERT, DELETE" )]
public static void MyTrigger() {
SqlTriggerContext myContext = SqlContext.TriggerContext;
MyDelagate d;
SqlCommand sqlComm;
SqlDataReader reader;

if( connection.State != ConnectionState.Open ) {
connection.Open();
}

switch( myContext.TriggerAction ) {
case TriggerAction.Update:
sqlComm = new SqlCommand( "SELECT X, Y FROM Inserted" );
sqlComm.Connection = connection;

reader = sqlComm.ExecuteReader();
try {
reader.Read();
d = new MyDelagate( MySendData );
d.BeginInvoke( "Update", "MyTable", ( Int32 )reader[ 0 ], ( Int32 )reader[ 1 ], null, null );
} catch( Exception ex ) {
} finally {
reader.Close();
}
break;
...
}
}

我怎么能在 SP 中调用所有 SQL 查询?

最佳答案

您不能在 SQL Server 运行您的 CLR 代码的线程之外使用上下文连接;这是为了确保服务器的可靠性——SQL Server 使用自定义 CLR 托管,我很惊讶它允许你旋转自己的线程。您可以使用 T-SQL 从 MyTrigger 调用 MySendData,在上下文 SqlConnection 上使用标准 ADO.NET SqlCommand,但它无法在单独的线程中运行。如果您真的想要数据库级别的异步/并行性,请查看 SQL Server Broker。

关于c# - CLR Stored Procedure需要一个Sql Server执行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9821748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com