2014-02-17 78 views
1

所以我有一个程序在C#访问从第三方程序的旧的Firebird 1.5数据库。其中一个我有会为任何一个报价或ID的项目获取数据的方法:SQL命令不返回特定记录

public static List<object> GetFollowUpData(int id, TipoFollowUp tipo) 
    { 
     var res = new List<object>(); 
     string q = tipo == TipoFollowUp.Orcamento 
      ? "SELECT ('Q-' || c.CLIENT_CODE || q.CQUO_FNUMB) as Codigo, q.CQUO_NAME as Nome, q.CQUO_SENT as Data, q.CQUO_TOTAL as Total, c.CLIENT_NAME as Empresa, m.CCON_NAME as Contacto, ((CASE WHEN m.CCON_PHONE1 IS null then '' else m.CCON_PHONE1 end) || '/' || (CASE WHEN m.CCON_PHONE2 IS null then '' else m.CCON_PHONE2 end) || '/' || (CASE WHEN m.CCON_PHONE3 IS null then '' else m.CCON_PHONE3 end) || '/' || (CASE WHEN m.CCON_PHONE4 IS null then '' else m.CCON_PHONE4 end) || '/' || (CASE WHEN c.CLIENT_PHONE1 IS null then '' else c.CLIENT_PHONE1 end) || '/' || (CASE WHEN c.CLIENT_PHONE2 IS null then '' else c.CLIENT_PHONE2 end) || '/' || (CASE WHEN c.CLIENT_PHONE3 IS null then '' else c.CLIENT_PHONE3 end) || '/' || (CASE WHEN c.CLIENT_PHONE4 IS null then '' else c.CLIENT_PHONE4 end)) as Telefones FROM CMULTIQUOTES q, CLIENTS c, CCONTACTS m WHERE q.ID = @id AND c.CLIENT_ID = q.CLIENT_ID AND q.CLIENT_PM = m.CCON_ID" 
      : "SELECT q.PROJ_CODE as Codigo, q.PROJ_NAME as Nome, q.PROJ_COMPLETED as Data, (select sum(j.CJOB_TOTAL) from CJOBS j where j.PROJ_ID = @id) as Total, c.CLIENT_NAME as Empresa, m.CCON_NAME as Contacto, ((CASE WHEN m.CCON_PHONE1 IS null then '' else m.CCON_PHONE1 end) || '/' || (CASE WHEN m.CCON_PHONE2 IS null then '' else m.CCON_PHONE2 end) || '/' || (CASE WHEN m.CCON_PHONE3 IS null then '' else m.CCON_PHONE3 end) || '/' || (CASE WHEN m.CCON_PHONE4 IS null then '' else m.CCON_PHONE4 end) || '/' || (CASE WHEN c.CLIENT_PHONE1 IS null then '' else c.CLIENT_PHONE1 end) || '/' || (CASE WHEN c.CLIENT_PHONE2 IS null then '' else c.CLIENT_PHONE2 end) || '/' || (CASE WHEN c.CLIENT_PHONE3 IS null then '' else c.CLIENT_PHONE3 end) || '/' || (CASE WHEN c.CLIENT_PHONE4 IS null then '' else c.CLIENT_PHONE4 end)) as Telefones FROM PROJECTS q, CLIENTS c, CCONTACTS m WHERE q.PROJ_ID = @id AND c.CLIENT_ID = q.CLIENT_ID AND q.CLIENT_PM = m.CCON_ID"; 
     using (var cmd = new FbCommand(q) {CommandType = CommandType.StoredProcedure}) 
     using (cmd.Connection = new FbConnection(ConnectionString)) 
     { 
      cmd.Connection.Open(); 
      cmd.Parameters.Add("@id", id); 
      using (FbDataReader reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        res.Add(id); // ID 
        res.Add(reader[0]); // Código 
        res.Add(reader[1]); // Nome 
        res.Add(reader[2]); // Data 
        res.Add(reader[3]); // Total 
        res.Add(reader[4]); // Empresa 
        res.Add(reader[5]); // Contacto 
        res.Add(reader[6]); // Telefones 
        res.Add(tipo); // Tipo 
       } 
       reader.Close(); 
      } 
      cmd.Connection.Close(); 
     } 
     return res; 
    } 

这工作的大部分时间(约在有一些葡萄牙语的话对不起) - 但是对于一个特定的项目它不返回任何数据(项目ID 8771)

我已经复制粘贴第二个查询到FlameRobin,将它连接到数据库,并用8771替换查询中的@id,然后flameRobin返回我想要的数据。

因此,如果FlameRobin可以使用我的查询来获取数据,为什么我的程序不能得到它呢? 在我上面的方法中,Reader.Read() imediatly返回false,并且我没有从该项目的数据库中获取数据。其他项目和报价到目前为止没有问题返回数据,据我所知

任何人有什么想法吗?

+0

无法读取记录的数据是什么?是否有任何奇怪的字符(嵌入换行符,空值或其他奇怪字符),任何列为空(但不在其他记录中)? –

+0

@KlasLindbäck由于FlameRobin非返回的数据为空或空。我无法准确地发布数据本身,因为它包含来自客户端的个人数据,但没有新行或空位出现 - 不确定您的意思是哪里有奇怪的字符 – 537mfb

+0

我看到您有两个不同的select语句。你有没有在FlameRobin中尝试过? –

回答

0

对不起大家 刚刚花了半天的时间,终于弄清楚我在开发/测试数据库副本中(在VS下)并连接到FlameRobin的生产副本。

缺乏的TW数据库之间的同步,造成这个

在生产复制中存在问题的项目 - 因此FlameRobin是显示它 - 但不是在程序使用的开发/测试副本

对不起