簡體   English   中英

使用 SQLite 在 C# 中對多個表進行內部聯接

[英]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個問題

  1. 為什么在表名( Attribute )中使用倒引號刪除引號。
  2. 在 where 子句中,在列名前添加別名或表名WHERE table.RxTx LIKE 'Tx'"

希望這對你有幫助

這是一個老問題,我想我沒有找到合適的答案,但我正在復制粘貼我的最后一次編輯,因為這似乎是我解決問題的方式。

我找不到查詢的問題。 我與一位同事交談過,他們告訴我,由於查詢適用於 DBeaver 之類的程序,可能是因為 .NET 中的驅動程序工作方式不同。 最后,我只是收集了不同數據表中的每個表,並獲得了我需要迭代和使用 if 控制語句的信息。

我將此標記為我的答案,但不會關閉帖子,以防有人在某個時候發現真正的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM