簡體   English   中英

如何從一個Oracle的數據庫中取出多個表的數據,創建一個數據表,然后將這些數據存儲在C#的一個class object中?

[英]How to retrieve data from multiple tables from an Oracle database, create a datatable and then store this data in a class object in C#?

我正在嘗試使用 C# 從 Oracle 數據庫的多個表中檢索數據。我使用while (reader.Read())從表中獲取所有記錄。 但是,這次我只想獲取一條特定的記錄,並將其存儲在 class 的一個 object 中,稱為 production。 我有以下代碼:


public DataTable GetProduction(string serialNr)
        {
            DataTable dataTable = new DataTable();

            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                string queryString = "SELECT E.SERIENR, R.PRODUCT_ID, R.LIJNSOORT, R.RATIO, R.AANTAL_PLAKKEN, R.EXTRA_INFO_ALFANUMERIEK_1, H.LAMELHOOGTE, R.LAMELAANTAL " +
                    "FROM RO_EXEMPLAAR E JOIN " +
                    "RO_ROOSTER R ON E.PRODUCT_ID = R.PRODUCT_ID JOIN " +
                    "RO_LAMELHOOGTE H ON H.LIJNSOORT = R.LIJNSOORT AND H.RATIO = R.RATIO " +
                    "WHERE E.SERIENR=" + serialNr;
                OracleCommand command = new OracleCommand(queryString);
                try
                {
                    command.Connection = connection;
                    connection.Open();
                    OracleDataAdapter da = new OracleDataAdapter(command);
                    da.Fill(dataTable);
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    connection.Close();
                }
            }
            return dataTable;
        }

當我通過提供序列號執行此操作時,它會提示我標識符無效。 我檢查了 sql 聲明,對我來說似乎都是正確的。 我該如何解決這個問題? 我還想使用存儲在此DataTable中的數據創建生產 object。 這怎么可能? 非常感謝!

我使用了 Oracle SQL 開發人員查詢工具,我意識到它不允許在查詢中間使用 +。 這就是我從queryString中刪除 + 符號的原因。

因為我的目標是能夠將任何序列號傳遞到查詢中,所以我使用了command.Parameters.AddWithValue("serialNr", serialNr);

這是完整的代碼:


public DataTable GetProduction(string serialNr)
        {
            Production temp = null;
            DataTable dataTable = new DataTable();

            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                string queryString = "SELECT E.SERIENR, R.PRODUCT_ID, R.LIJNSOORT, R.RATIO, R.AANTAL_PLAKKEN, R.EXTRA_INFO_ALFANUMERIEK_1, H.LAMELHOOGTE, R.LAMELAANTAL FROM RO_EXEMPLAAR E JOIN RO_ROOSTER R ON E.PRODUCT_ID = R.PRODUCT_ID JOIN RO_LAMELHOOGTE H ON H.LIJNSOORT = R.LIJNSOORT AND H.RATIO = R.RATIO WHERE E.SERIENR=:serialNr";
                OracleCommand command = new OracleCommand(queryString);
                try
                {
                    command.Connection = connection;
                    connection.Open();
                    command.Parameters.AddWithValue("serialNr", serialNr);
                    OracleDataAdapter da = new OracleDataAdapter(command);
                    da.Fill(dataTable);
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    connection.Close();
                }
            }
            return dataTable;
        }

要從 dataTable 訪問存儲的信息:


string serialNo = dt.Rows[0]["SERIENR"].ToString();
int productID = Convert.ToInt32(dt.Rows[0]["PRODUCT_ID"]); 

我希望這對你也有幫助!

暫無
暫無

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

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