gpt4 book ai didi

c# - 将参数插入 ASP.Net SQL 查询

转载 作者:行者123 更新时间:2023-11-29 21:54:01 24 4
gpt4 key购买 nike

我正在尝试使用 C# 和 ASP.Net 替换一些运行 SQL 查询的旧代码。旧代码运行一个复杂的函数来将查询构建为字符串。我将其替换为 GridView 控件和 SqlDataSource。 SqlDataSource 包含一个具有两个参数的查询:员工 ID (EID) 和时间范围 (DateFilter)。第二个过滤器当前是一个表达式:

and a.end_dt >= Dateadd(m, Datediff(m, 0, Dateadd(m, -1, current_timestamp)), 0) 

其中“-1”实际上是下拉控件的值。

问题:我无法插入@EID 和@DateFilter 的值。如果我直接将上面的代码放入 SQL 查询中,它就可以正常运行,获得上个月左右事件的结果。如果我尝试将该文本插入@DateFilter,则会出现崩溃,提示“'@DateFilter'附近的语法不正确。”

我在这里有点盲目,因为我无法访问至少有一个关联记录的 EID,所以我无法确认 @EID 的值是否被替换。但从语法错误来看,@DateFilter 看起来没有被替换。

SqlDataSource 有一个参数“OnSelecting="DSTravel_Selecting"”,这意味着它在运行内置的 Select 语句之前调用该函数。该函数旨在执行变量替换,如下所示:

if(Session["eid"] == null) 
{
e.Command.Parameters.Add(new SqlParameter("@EID", "null"));
}
else
{
e.Command.Parameters.Add(new SqlParameter("@EID", Session["eid"]));
}

filter = " " // For debugging. Should be the above-quoted expression.

e.Command.Parameters.Add(new SqlParameter("@DateFilter", filter));

但是该函数只是给了我“语法错误”错误。我还尝试在标签内提前定义参数:

<SelectParameters>
<asp:Parameter Name="EID" Type="String" />
<asp:Parameter Name="DateFilter" Type="String" />
</SelectParameters>

但是当我尝试在 C# 函数中引用这些参数时,我就不再那么幸运了。我需要做什么才能简单地将两个 @ 参数替换为在 SQL 查询运行之前运行的函数中确定的特定文本 block ?

哦,部分实际查询是:

SelectCommand="select [various things] from [table] where a.record_locator IS NOT NULL and (a.eid='@EID' or 1=1) @DateFilter order by a.end_date;"

最佳答案

目前,变量@DateFilter被视为文字字符串而不是sql命令的一部分,您需要将此变量连接到字符串中,然后使用系统存储过程sp_executesql 或关键字 Exec(@SqlQuery) 执行该字符串(命令)。

更好的方法是使用存储过程并在过程中完成所有这些操作,您也会获得更好的性能。

CREATE PROCEDURE my_Proc
@EID VARCHAR(20) = NULL
,@DateFilter DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
Declare @Sql NVARCHAR(MAX);

SET @Sql = N'select [various things]
from [table]
where record_locator IS NOT NULL '
+ CASE WHEN @EID IS NOT NULL
THEN N' AND eid = @EID ' ELSE N''END
+ CASE WHEN @DateFilter IS NOT NULL
THEN N' AND end_dt >= Dateadd(m, Datediff(m, 0, Dateadd(m, -1, current_timestamp)), 0)'
ELSE N'' END

+ N' order by a.end_date;'

Exec sp_executesql @Sql
,N'@EID VARCHAR(20)'
,@EID
END

关于c# - 将参数插入 ASP.Net SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355572/

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