具有多个条件的ODBC查询不会产生任何结果

时间:2017-09-15 20:17:28

标签: c# odbc 4d-database

当通过odbc系统dsn查询4d数据库时,我能够从带有连接的语句和单个或不带条件的地方获取数据。

这有效:

    static void Main(string[] args)
    {
        OdbcConnection sys4dConn = new OdbcConnection("Dsn=sys4dName");
        try
        {
            OdbcCommand getData = new OdbcCommand("
            SELECT
                Item.Client,
                CAST(Item.xref1 AS VARCHAR),
                CAST(Item.xref2 AS VARCHAR),
                CAST(Item.xref3 AS VARCHAR),
                CAST(Item.xref4 AS VARCHAR),
                Item.owner,
                Item.Storage_Date,
                Item.Temporary_Item_ID,
                Item.ItemType,
                Item.Item_Condition,
                Location.UnitName,
                Part.ConcatPosition,
                Part.Position1,
                Part.Position2,
                Part.Position3,
                Part.Position4,
                Part.Position5,
                Item.Comments,
                Part.Checked_Out_Reason,
                AuditTrail.ReasonforChange,
                '123abc' as CheckoutStatus 
            FROM
                Item 
                LEFT JOIN
                    Part 
                    ON Item.PK_ItemUID = Part.FK_ItemUID 
                LEFT JOIN
                    AuditTrail 
                    ON Part.PK_PartUID = AuditTrail.FK_PartUID 
                    AND 
                    (
                        Part.Position1 IS NOT NULL 
                        AND Part.Position2 IS NOT NULL 
                        AND Part.Position3 IS NOT NULL 
                        AND Part.Position4 IS NOT NULL 
                        AND Part.Position5 IS NOT NULL 
                    )
                LEFT JOIN
                    Location 
                    ON Part.FK_UnitSectID = Location.PK_UnitSectID 
            WHERE
                Item.Client = '4468'", sys4dConn);

            getData.CommandType = CommandType.Text;
            OdbcDataAdapter daGetData = new OdbcDataAdapter(getData);

            using (DataTable dtTbl = new DataTable())
            {
                sys4dConn.Open();
                OdbcDataReader dr = getData.ExecuteReader();
                while (dr.Read())
                {
                    DataRow dtRow = dtTbl.NewRow();
                    for (int i = 0; i < dtTbl.Columns.Count; i++)
                    {
                        dtRow[i] = dr[i].ToString();
                    }
                    dtTbl.Rows.Add(dtRow);
                }
                sys4dName.Close();
            }
        }
    }

(查询文本已针对此帖子进行了格式化。实际字符串只有空格,没有回车符或换行符。)

这也有效:

         ...WHERE
                Item.Client IN ('4468')", sys4dConn);

对于上述每一项,查询返回12行数据。 如果我将客户端更改为“7147”,则会获得14行数据。

但是,当我想在一个数据集中同时拉动时,我得到零行。

这些都不起作用:

         ...WHERE
                Item.Client = '4468'
                OR Item.Client = '7147'", sys4dConn);


         ...WHERE
                Item.Client IN ('4468','7147')", sys4dConn);


         ...WHERE
                Item.Client = ?
                OR Item.Client = ?", sys4dConn);
            getData.Parameters.AddWithValue("client", "4468");
            getData.Parameters.AddWithValue("client", "7147");

最后一个抛出以下内容:

  

System.Data.dll中出现未处理的“System.AccessViolationException”类型异常

     
    

附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

  

是否有一些语法允许我在我的odbc查询的where子句中包含多个条件?

删除了所有连接的查询版本确实使用

返回26行
         ...WHERE
                Item.Client = '4468'
                OR Item.Client = '7147'", sys4dConn);

0 个答案:

没有答案