gpt4 book ai didi

c# - 如何覆盖 SqlCommand 以获取生成的 TSQL

转载 作者:行者123 更新时间:2023-11-30 17:33:57 25 4
gpt4 key购买 nike

有什么方法可以拦截 SqlCommand 生成的 SQL 吗?

我目前有一个执行存储过程的方法:

public int ExecSP(string spName, params objec[] params)
{
using (SqlConnection con = new SqlConnection("AdventureWorks"))
using (SqlCommand cmd = new SqlCommand(spName, con))
{
cmd.CommandType = CommandType.StoredProcedure;

//..calls method to add params and values to cmd object

con.Open();
return cmd.ExecuteNonQuery();
}
}

当我使用它调用以下内容时:

ExecSP("HumanResources.uspUpdateEmployeePersonalInfo", 1, "295847284", new DateTime(1963, 3, 2), "S", "M");`

我在 SQLProfiler 中得到以下信息:

exec HumanResources.uspUpdateEmployeePersonalInfo @BusinessEntityID=1,@NationalIDNumber=N'295847284',@BirthDate='1963-03-02 00:00:00',@MaritalStatus=N'S',@Gender=N'M'

我想做的是拦截该 SQL 命令,以便我可以在它的末尾添加一条包含一些相关信息的注释,使其看起来像:

exec HumanResources.uspUpdateEmployeePersonalInfo @BusinessEntityID=1,@NationalIDNumber=N'295847284',@BirthDate='1963-03-02 00:00:00',@MaritalStatus=N'S',@Gender=N'M' -- IMPORTANT INFORMATION HERE

我无法将 CommandType 更改为 Text,也无法向存储过程添加额外的参数。我试着查看这些其他问题,但没有运气:

Can I override SqlCommand functions?

SqlCommand to T-SQL

最佳答案

CommandType = CommandType.StoredProcedure 的情况下,这是不可能的。

为什么?您在 SQL 事件探查器中看到的 SQL 不是由客户端生成的。 :-/

当 SqlCommand 执行 CommandType.StoredProcedure 命令时,它向 SQL Server 发送一个 execute remote procedure call message带有存储过程的名称和包含参数的数据结构。

RPC:Starting/RPC:Completed 事件显示的 TextData SQL Profiler 是在服务器端生成的。由于此文本不是在客户端生成的,因此无法在客户端对其进行修改。

关于c# - 如何覆盖 SqlCommand 以获取生成的 TSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080173/

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