繁体   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