【问题标题】:C# problem with oracle databaseoracle数据库的C#问题
【发布时间】:2011-05-18 17:07:43
【问题描述】:

您好,我想用从 Oracle 数据库获取的数据填写一个列表。 但它总是给我错误。

这是我的连接类

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
using System.Windows.Forms;

namespace Kunst_In_Huis_C
{
    class Connectie
    {
        String strApplicationName = Application.ProductName;
        Logging objLoggingApplication = new Logging("d:\\project.log");

        private OracleConnection con;
        public Connectie()
        {
            con = new OracleConnection();
        }
        public void openConnectie()
        {
            if (con.State == ConnectionState.Closed)
            {
                con = new OracleConnection("Data Source=192.168.1.106/orcl;User ID=???;Password=???;Unicode=True");
                con.Open();
            }
        }
        public void sluitConnectie()
        {
            try
            {
                this.con.Close();
            }
            catch (Exception)
            {
                Console.WriteLine("fout bij het afsluiten van de connectie...");
            }
        }
        public void voerQueryUit(String sql)
        {
            try
            {
                OracleCommand cmd = new OracleCommand(sql, con);
                OracleDataReader oradr = cmd.ExecuteReader();
                while (oradr.Read())
                {
                    Console.WriteLine(oradr.GetInt32(0) + " \t " + oradr.GetString(1));
                }
                oradr.Close();
            }
            catch (OracleException ex)
            {
                Console.WriteLine("Oracle Error\n" + ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("General App Error" + ex.Message);
            }
            finally
            {
                con.Close();
            }
        }
        public void VulFilialen()
        {
            try
            {
                OracleCommand cmd = new OracleCommand("Select Fil_Adres from Filialen", con);
                OracleDataReader oradr = cmd.ExecuteReader();
                List<String> Filialen = new List<String>();

                oradr = cmd.ExecuteReader();

                while (oradr.Read())
                {
                    Filialen.Add(oradr(0));
                }
                return Filialen;
            }
            catch (Exception ex)
            {
                objLoggingApplication.WriteLine(strApplicationName, ex.Message);
            }
            finally
            {
                con.Close();
            }

        }
    }
}

它在我返回时总是给我错误,当我想在列表中添加一些东西时。

【问题讨论】:

  • 错误是什么?完成后还要处理您的连接/命令/等对象。
  • oradr = cmd.ExecuteReader() 你为什么要这样做两次?

标签: c# oracle list connection


【解决方案1】:

您应该停止使用 System.Data.OracleClient 类,如they're deprecated。请改用ODP.NET

对于您的问题,请尝试将 oradr.GetInt32 替换为 oradr.GetDecimal。您应该注意的另一件事是,Filialen.Add(oradr(0)) 甚至不会编译,因为oradr 不是一种方法。您可能错过了添加方法的名称。

如果这不起作用,请提供完整的异常信息。

【讨论】:

  • 但是那部分没有问题,只有功能VulFilialen
【解决方案2】:

我们确实需要错误消息来提供更好的帮助,但我认为我会查看 datareader 中的读取项。

你的代码

while (oradr.Read())
   {
      Console.WriteLine(oradr.GetInt32(0) + " \t " + oradr.GetString(1));
   }

我会替换为

while (oradr.Read())
   { 
     Console.WriteLine(Convert.ToString(oradr[0]) + " \t "
                                     + Convert.ToString(oradr[1]));
   }

我可能离这里很远,但看看代码,这就是我跳出来的部分。

然后将Filialen.Add(oradr(0)) 转换为Filialen.Add(Convert.ToString(oradr[0]))

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多