【发布时间】:2020-04-01 16:48:35
【问题描述】:
我有一个可以由用户为多列动态更改的过程,我在运行它时用 SQL 编写它。在 Visual Studio 的 SQL 和 Server Explorer 中一切正常,但是当我想在 C# 中使用它并调用它时,它总是返回 0。 谁能帮帮我?!
CREATE PROCEDURE [dbo].[PDaynamicActualBy2Column]
@Colname1 nvarchar(100),
@VarCol1 nvarchar(100),
@Colname2 nvarchar(100),
@VarCol2 nvarchar(100),
@VarWeekNum nvarchar(100)
as
DECLARE @temp nvarchar(1500)
set @temp='SELECT SUM([dbo].[WeekActualTemp].[ACTUAL]) from [dbo].[MAINTB] join [dbo].[WeekActualTemp] on [dbo].[MAINTB].[UQ]=[dbo].[WeekActualTemp].[UQ]
where [dbo].[WeekActualTemp].[WeekNO]='+@VarWeekNum+' And [dbo].[MAINTB].'+@Colname1+' = '''+@VarCol1+''' And [dbo].[MAINTB].'+@Colname2+' = '''+@VarCol2+''''
exec (@temp)
【问题讨论】:
-
一点建议,把
PRINT @temp放在EXEC之前。然后你可以调试正在执行的sql,也许会有什么东西跳出来。哎呀,为什么不打印正在执行的 sql 并与您的问题一起发布......那会很酷。 -
此过程存在安全隐患,因为它为 SQL 注入攻击打开了大门。此外,在列标识符中使用超过 2 部分是不推荐的 - 即使它不是 - 有 good reasons 为什么你应该为你的列坚持使用 2 部分标识符。阅读我题为 The do’s and don’ts of dynamic SQL for SQL Server 的博文,了解如何编写安全的动态 SQL。
-
我为我的专栏做一些计算的唯一方法是用户选择手册是这样的,无论如何我都知道如何解决它,但是在 c# 代码中调用这个程序时它总是返回 0跨度>
-
请edit您的问题包含执行该过程并尝试将值返回给c#的c#代码。
-
再次,请edit您的问题包含执行该过程的c#代码。
标签: c# sql sql-server tsql stored-procedures