从数据库获取值后,C# 中的查询返回 false
Posted
技术标签:
【中文标题】从数据库获取值后,C# 中的查询返回 false【英文标题】:query in c# returns false after getting values from the db 【发布时间】:2019-06-20 13:43:09 【问题描述】:如果此查询返回值,我需要返回 true,(并且它在 db 中有值)
SELECT * from AllMembers a
join Cards c on c.IDMember = a.MemberID
where LEN(a.EmployeeNum) = 9
and LEFT(c.CardNumber,3) = '777'
and a.Email is not null
and a.LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and c.CardStatus = 1
and c.AddedTime > DATEADD(YEAR, -1 , GETDATE())
or
LEN(a.EmployeeNum) = 9
and LEFT(c.CardNumber,4) = '2010'
and a.Email is not null
and a.LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and c.CardStatus = 1
and c.AddedTime > DATEADD(YEAR, -1 , GETDATE())
但是写这个值返回false,为什么?
string Query= string.Format(@"use Knowledge4All
IF EXISTS (
SELECT ID FROM 0..AllMembers
JOIN Cards where IDMember = @memberID
and (where LEN(EmployeeNum) = 9
and LEFT(CardNumber,3) = '777'
and Email is not null
and LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and CardStatus = 1
and AddedTime > DATEADD(YEAR, -1 , GETDATE())))
select 1
OR
IF exists(
(LEN(EmployeeNum) = 9
and LEFT(CardNumber,4) = '2010'
and Email is not null
and LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and CardStatus = 1
and AddedTime > DATEADD(YEAR, -1 , GETDATE()) )
SELECT 1", DbName);
我写错了吗?朗姆酒最好的理由是什么?
【问题讨论】:
为什么要在查询开头加上use KnowledgeAll?您是否连接到不同的数据库? @Steve 是的,这是个错误 我认为你的问题在这里0..AllMembers
你有太多的点(。),应该0.AllMembers
@styx 该语法用于选择默认架构。例如,如果默认架构是 dbo,那么这将等同于 您可以编写如下查询。
IF EXISTS(SELECT 1 from AllMembers a
join Cards c on c.IDMember = a.MemberID
where LEN(a.EmployeeNum) = 9
and LEFT(c.CardNumber,3) = '777'
and a.Email is not null
and a.LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and c.CardStatus = 1
and c.AddedTime > DATEADD(YEAR, -1 , GETDATE())
or
LEN(a.EmployeeNum) = 9
and LEFT(c.CardNumber,4) = '2010'
and a.Email is not null
and a.LastUpdate > DATEADD(YEAR, -1 , GETDATE())
and c.CardStatus = 1
and c.AddedTime > DATEADD(YEAR, -1 , GETDATE())
)
BEGIN
SELECT 1 as Status
END
ELSE
BEGIN
SELECT 0 AS Status
END
如果您使用ExecuteScalar()
,您将获得适当的值。
查询中的其他观察结果
1- 不需要 USE 语句。仅当连接字符串设置为不同的默认目录时才需要。
2- 您正在使用 string.format
而不替换任何内容。
但是写这个值返回false,为什么?
这可能是由于条件与您表中的任何记录都不匹配。直接在 SSMS 中运行查询并检查输出。
【讨论】:
如果连接字符串设置为不同的默认目录,则可能需要USE
。以上是关于从数据库获取值后,C# 中的查询返回 false的主要内容,如果未能解决你的问题,请参考以下文章