【问题标题】:query in c# returns false after getting values from the db从数据库获取值后,C# 中的查询返回 false
【发布时间】: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.

标签: c# mysql sql-server


【解决方案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
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2012-08-16
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多