当通过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);