[英]Inner Join of more than one table in C# with SQLite
我需要在我的 C# 程序中對多個表進行內部聯接。
我嘗試在同一個數據庫中使用 DBeaver 執行我的查詢,並且它有效。 但是當我在我的 C# 代碼中使用相同的查詢時,它什么都不返回。 我知道連接有效,因為我從其中一個表中獲取數據,並且確實填充了數據。 此外,它只做一個內部連接就可以工作。 我使用 SQLite NuGet 包。
這是我的查詢(我在 DBeaver 中使用的查詢):
SELECT mcc.ModeloId, t.FctrlClusterId, mcc.FctrlClusterDescription, cl.ClusterId, cl.ClusterName,
t.Command, co.CommandName, t.AttributeId, at.AttributeName, t.DataPosition, t.DataType, t.TramaData
FROM Trama t
INNER JOIN ModeloClusterCanal mcc ON t.FctrlClusterId = mcc.FctrlClusterId
INNER JOIN Cluster cl ON mcc.ClusterId = cl.ClusterId
INNER JOIN Command co ON t.Command = co.CommandId
INNER JOIN Attribute at ON t.AttributeId = at.AttributeId
WHERE RxTx LIKE 'Tx'
這是我的 C# 代碼(使用相同的查詢,但使用String.Format()
):
private static readonly string tablaCluster = "Cluster";
private static readonly string tablaCommand = "Command";
private static readonly string tablaAttribute = "Attribute";
private static readonly string tablaModeloClusterCanal = "ModeloClusterCanal";
private static readonly string tablaTrama = "Trama";
CommandText = String.Format("SELECT mcc.ModeloId, t.FctrlClusterId, mcc.FctrlClusterDescription, cl.ClusterId, cl.ClusterName, t.Command, " +
"co.CommandName, t.AttributeId, at.AttributeName, t.DataPosition, t.DataType, t.TramaData " +
"FROM {0} t " +
"INNER JOIN {1} mcc ON t.FctrlClusterId = mcc.FctrlClusterId " +
"INNER JOIN {2} cl ON mcc.ClusterId = cl.ClusterId " +
"INNER JOIN {3} co ON t.Command = co.CommandId " +
"INNER JOIN \"{4}\" at ON t.AttributeId = at.AttributeId " +
"WHERE t.RxTx LIKE 'Tx'",
tablaTrama,
tablaModeloClusterCanal,
tablaCluster,
tablaCommand,
tablaAttribute);
SqliteAdapter = new SQLiteDataAdapter(CommandText, SqliteConnection);
SqliteAdapter.Fill(DataSet, "TramasTx");
我也嘗試直接使用查詢字符串,而不對其進行格式化,但它給出了相同的結果。
在 DBeaver 中,我獲得了所需的列和行。
在C#中, Table
與我填充DataSet
具有0行。
我嘗試使用INNER JOIN 中所說的括號到多個表,但它也不起作用。 我真的看不出是什么導致了這種情況。
如果數據庫的 ER 圖有幫助,我可以編輯問題並添加它。
編輯:我編輯了 CommandText,因為我留下了一些不應該在那里的括號,我還嘗試重置 SqliteCommand 變量(因為我之前用過另一個命令),但這也不起作用。 我將嘗試為 SQLiteCommand 使用另一個變量,因為我不知道重用它是否會影響結果?
EDIT2:我根本沒有使用 SQLiteCommand 變量,所以擺脫了它。 我嘗試處理 SQLiteAdapter(因為我確實將它用於我之前獲得的表數據),但它也不起作用。 它沒有給我任何錯誤或異常,它只是在數據集中創建表,但行數為 0。
EDIT3:我找不到查詢的問題。 我與一位同事交談過,他們告訴我,由於查詢適用於 DBeaver 之類的程序,可能是因為 .NET 中的驅動程序工作方式不同。 最后,我只是收集了不同數據表中的每個表,並獲得了我需要迭代和使用 if 控制語句的信息。 我希望這可以幫助別人。
有2個問題
Attribute
)中使用倒引號刪除引號。WHERE table.RxTx LIKE 'Tx'"
希望這對你有幫助
這是一個老問題,我想我沒有找到合適的答案,但我正在復制粘貼我的最后一次編輯,因為這似乎是我解決問題的方式。
我找不到查詢的問題。 我與一位同事交談過,他們告訴我,由於查詢適用於 DBeaver 之類的程序,可能是因為 .NET 中的驅動程序工作方式不同。 最后,我只是收集了不同數據表中的每個表,並獲得了我需要迭代和使用 if 控制語句的信息。
我將此標記為我的答案,但不會關閉帖子,以防有人在某個時候發現真正的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.