【发布时间】:2018-12-19 09:52:21
【问题描述】:
我正在尝试使用这样的存储过程从我的数据库中获取一些数据
[getAllRecordsForSalaryCalculation]
@year NCHAR(10),
@Bruger NCHAR(20)
AS
BEGIN
IF (@year = 2018)
BEGIN
SELECT SUM(Overtid1) AS overtid1Before
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2018-12-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-04-30')
AND Bruger LIKE '%@Bruger%'
SELECT SUM(Overtid1) AS overtid1after
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2019-05-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-11-30')
AND Bruger LIKE '%@Bruger%'
SELECT SUM(Overtid2) AS overtid2Before
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2018-12-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-04-30')
AND Bruger LIKE '%@Bruger%'
SELECT SUM(Overtid2) AS overtid2after
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2019-05-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-11-30')
AND Bruger LIKE '%@Bruger%'
SELECT SUM(Vagt) AS vagtBefore
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2018-12-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-04-30')
AND Bruger LIKE '%@Bruger%'
SELECT SUM(Vagt) AS vagtafter
FROM timer
WHERE DateForQuery >= CONVERT(DATETIME, '2019-05-01')
AND DateForQuery <= CONVERT(DATETIME, '2019-11-30')
AND Bruger LIKE '%@Bruger%'
END
END
我的代码是这样的
con.Open();
SqlDataAdapter da = new SqlDataAdapter("getAllRecordsForSalaryCalculation", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@year", year);
da.SelectCommand.Parameters.AddWithValue("@Bruger", bruger);
da.Fill(ds);
con.Close();
但我只得到第一个选择并且它是空的。那里有数据,当我将它作为查询运行时它可以工作。我不确定我在哪里做错了。有人可以帮忙吗?
【问题讨论】:
-
您的 LIKE 子句定义错误,请参阅此问题:stackoverflow.com/questions/14237755/…。请改用
Bruger LIKE '%' + @Bruger + '%'。 -
显然它在作为查询运行时不起作用,因为
'%@Bruger%'不会像您认为的那样做。还有很多不使用AddWithvalue的理由。NCHAR也是 Year 的错误数据类型 -
以及关于不使用addwithvalue的讨论
-
您的过程生成 6 个结果集,每个结果集 1 行(可能),而不是 1 个结果集 6 行(具有不同的列名)。你明白其中的区别吗?此外,这些信息的消费者如何知道每一行的“含义”?你强迫消费者根据位置来假设一些东西。这不是一个好的设计 - 重新开始。
标签: c# sql-server