【问题标题】:Start SQL Server extended event session using c#使用 c# 启动 SQL Server 扩展事件会话
【发布时间】:2020-07-20 23:07:58
【问题描述】:

我需要通过我的 C# 代码启动 SQL Server 扩展事件会话。

我有这段代码来创建一个会话然后执行它,但是它不起作用,请帮忙吗?

代码:

创建会话的 SQL 语句

string sql = "DECLARE @file nvarchar(500), @path nvarchar(500), @db sysname = DB_NAME(); 

SET @file = RTRIM(N'D:\XE\ ') + @db;
SET @path = @file + N'day'; 

EXEC master.dbo.xp_create_subdir @file;

DECLARE @sql nvarchar(max) = N'CREATE EVENT SESSION ' + @db + N'_Session1 
  ON SERVER 
  ADD EVENT sqlserver.sql_statement_completed 
  (
    ACTION (sqlserver.sql_text, sqlserver.tsql_stack, sqlserver.client_app_name, 
            sqlserver.client_hostname, sqlserver.username 
  ) WHERE ( sqlserver.database_name = N''' + @db + N''' ) ),
  ADD EVENT sqlserver.sql_statement_starting 
  (
    ACTION (sqlserver.sql_text, sqlserver.tsql_stack, sqlserver.client_app_name, 
            sqlserver.client_hostname, sqlserver.username 
  ) WHERE ( sqlserver.database_name = N''' + @db + N''')
)
ADD target package0.event_file
(
  SET filename = N''' + @path + N'''
) 
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
      MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,
      MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=ON);';

EXEC master.sys.sp_executesql @sql;"

string sql1=" DECLARE @fichier nvarchar(500),@database sysname = DB_NAME(); 


DECLARE @sql1 nvarchar(max)  =N'ALTER EVENT SESSION  ' + @database + N'_Session ON SERVER STATE = START  '

EXEC master.sys.sp_executesql @sql1;"

【问题讨论】:

  • 请不要在 C# 字符串中构建 SQL 语句。这将使您的代码对 SQL 注入产生怀疑,这是非常不安全的。使用 EntityFramework 之类的东西与数据库进行通信,或者使用存储过程。
  • 请提供两种方式的任何文档?
  • 你遇到了什么错误?
  • @db+N' 附近的语法不正确.. 即使查询在 SSMS 中工作正常

标签: c# sql-server asp.net-core extended-events


【解决方案1】:

我认为这里的问题是您已将 SQL 执行语句放入 C# 字符串中。相反,您应该使用框架的 System.Data.SqlClient 方法来执行查询。请参阅以下内容:

How to directly execute SQL query in C#?

【讨论】:

  • 我使用与链接相同的方法,但它返回一个不正确的语法异常,即使它适用于 SSMS
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2018-07-27
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多