从数据库获取值后,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,那么这将等同于 .dbo.AllMembers. 【参考方案1】:

您可以编写如下查询。

 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的主要内容,如果未能解决你的问题,请参考以下文章

从查询 C#、EF Core 返回一个值

Oracle 12C:插入值后返回记录

不通过 C# 从 ms access 数据库返回任何数据,如果我在 ms access 上运行相同的查询,它将获取数据

从 C# 中的插入查询返回 ID

从数据库中获取值后如何清除 jComboBox

减少查询中的结果数