проблема получения моих данных из базы данных Access 2003 в C # (ошибка dbReader.GetString) - PullRequest
0 голосов
/ 24 октября 2010

[получил немного дальше, поэтому его обновили]

Здравствуйте, я действительно надеюсь, что вы сможете мне помочь!

Теперь первая часть моего кода работает, и я вывожу номера отчетов в свой комбинированный список, и я могу записать это число в фунт.теперь мне нужно взять это число и получить оставшиеся данные из базы данных Access 2003 и поместить их в строку (мой вывод).(Я действительно не хочу, чтобы все данные загружались в мою память при открытии программы, поэтому я верю, что получаю только [Rapport nr], пока не выберу один, где я буду загружать данные в строку и сохранять их там сейчас):)

моя проблема в том, что это не сработает!

output = dbReader.GetString(dbReader.GetOrdinal("Dato")).ToString();

OBS: моя ошибка в том, что теперь я говорю, что у меня нет данных в строках или столбцах

мой код выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private string aktuelRapportNR = "";
        string output = "";

        private string connectionName = "Provider=Microsoft.Jet.OLEDB.4.0;"
            + "Data Source=semcqdjh-access 2007.mdb;"
            + "Jet OLEDB:Database Password=;";




        public Form1()
        {
            InitializeComponent();
            #region Indlæsning af combobox, med rapport numre
            OleDbConnection Myconnection = null;
            OleDbDataReader dbReader = null;

            Myconnection = new OleDbConnection(connectionName);
            Myconnection.Open();

            OleDbCommand cmd = Myconnection.CreateCommand();
            cmd.CommandText = "SELECT [Rapport nr] FROM AVR";
            dbReader = cmd.ExecuteReader();

            int rapportNR;
            while (dbReader.Read())
            {
                rapportNR = (int)dbReader.GetInt32(dbReader.GetOrdinal("Rapport nr"));

                comboBox1.Items.Add(rapportNR);

            }

            dbReader.Close();
            Myconnection.Close();


#endregion
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            aktuelRapportNR = comboBox1.SelectedItem.ToString();
            lblAktuelRapportNR.Text = aktuelRapportNR;

            OleDbConnection Myconnection = null;
            OleDbDataReader dbReader = null;

            Myconnection = new OleDbConnection(connectionName);
            Myconnection.Open();

            OleDbCommand cmd = Myconnection.CreateCommand();
            cmd.CommandText = "SELECT [Dato] FROM AVR WHERE [Rapport nr] =" + aktuelRapportNR;
            dbReader = cmd.ExecuteReader();

            try
            {
                output = dbReader.GetString(dbReader.GetOrdinal("Dato")).ToString();

            }
            catch (Exception)
            {
                output = "fejl eller tom";
            } 
            dbReader.Close();
            Myconnection.Close();

            label1.Text = output;
        }

        private void btnExport_Click(object sender, EventArgs e)
        {

        }


    }
}

1 Ответ

0 голосов
/ 24 октября 2010

я понял это: D после перерыва я вернулся к этому и попытался выяснить, есть ли другой способ, который я мог бы использовать, и был: P Я понял из-за ошибки, что это было что-то правильно с такими типамивзяв один и пытаясь обойти это, я вынул строку отверстия и поместил ее в массив объектов: P с помощью GetValues ​​в dbReader, я заставил его работать, так что теперь я могу двигаться дальше: D для тех, кто может быть заинтересован!Вот мой код: P это не красиво, но это работает: P i allso взял som try catch, просто чтобы убедиться, что я проверяю ошибки и получаю дружественный ответ на это :)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private string aktuelRapportNR = "";
        string output;

        private string connectionName = "Provider=Microsoft.Jet.OLEDB.4.0;"
            + "Data Source=semcqdjh-access 2007.mdb;"
            + "Jet OLEDB:Database Password=;";




        public Form1()
        {
            InitializeComponent();
            #region Indlæsning af combobox, med rapport numre
            try
            {

                OleDbConnection Myconnection = null;
                OleDbDataReader dbReader = null;

                Myconnection = new OleDbConnection(connectionName);
                Myconnection.Open();

                OleDbCommand cmd = Myconnection.CreateCommand();
                cmd.CommandText = "SELECT [Rapport nr] FROM AVR";
                dbReader = cmd.ExecuteReader();

                int rapportNR;
                while (dbReader.Read())
                {
                    rapportNR = (int)dbReader.GetInt32(dbReader.GetOrdinal("Rapport nr"));

                    comboBox1.Items.Add(rapportNR);

                }

                dbReader.Close();
                Myconnection.Close();
                txtStatus.Text = "Indlæsning Fuldført! Vælg venligst en rapport";
            }
            catch (Exception)
            {

                txtStatus.Text = "Indlæsning Fejlet!";
            }

#endregion
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            aktuelRapportNR = comboBox1.SelectedItem.ToString();
            lblAktuelRapportNR.Text = aktuelRapportNR;

            txtStatus.Text = "Du har valgt rapport nr.: " + aktuelRapportNR + "! Klik på export";
        }

        private void btnExport_Click(object sender, EventArgs e)
        {
            try
            {

                OleDbConnection Myconnection = null;
                OleDbDataReader dbReader = null;

                Myconnection = new OleDbConnection(connectionName);
                Myconnection.Open();

                OleDbCommand cmd = Myconnection.CreateCommand();
                cmd.CommandText = "SELECT * FROM AVR WHERE [Rapport nr] =" + aktuelRapportNR;
                dbReader = cmd.ExecuteReader();

                object[] liste = new object[dbReader.FieldCount];
                if (dbReader.Read() == true)
                {

                    int NumberOfColums = dbReader.GetValues(liste);

                    for (int i = 0; i < NumberOfColums; i++)
                    {
                        output += "|" + liste[i].ToString();
                    }

                }

                dbReader.Close();
                Myconnection.Close();
                txtStatus.Text = "Export Lykkes! Luk programmet!";
            }
            catch (Exception)
            {

                txtStatus.Text = "Export Fejlet!";
            }


        }


    }
}
...