将我的数据从 access 2003 db 获取到 c# 的问题(dbReader.GetString 错误)

Posted

技术标签:

【中文标题】将我的数据从 access 2003 db 获取到 c# 的问题(dbReader.GetString 错误)【英文标题】:problem getting my data from access 2003 db into c# (dbReader.GetString error) 【发布时间】:2010-10-24 15:10:13 【问题描述】:

[更进一步,所以更新了]

你好,我真的希望你能帮助我!

现在我的代码的第一部分确实有效,并且我确实在我的组合框中得到了我的报告编号,并且我能够将该编号写入 lbl。现在我需要获取那个数字并从我的 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)
        

        


    

【问题讨论】:

我自己看到了,所以我更新了我的帖子并进一步了解了:P 不过还是谢谢 :P OBS:我的错误是现在它说我的行或列中没有任何数据 没关系 :P 现在完成了 :D 感谢您的帮助 :P 好吧,我不认为我的问题出在数据库上,尽管我在代码的第一部分中得到了我的数字,但不是第二个中的其他数据? 语句按原样返回,我只是在访问中对其进行了测试.. 看看我是否可以从 vs 中的调试器获得更多信息:/ 【参考方案1】:

我想通了 :D 休息后我回到这个并试图看看是否有其他方法我可以使用并且有 :P 我通过错误认为这是正确的类型拿出一个并试图解决这个问题,我把洞行拿出来放在一个对象数组中:P 通过在 dbReader 中使用 GetValues 我让它工作了,所以我现在可以继续:D 对于那些可能感兴趣的人!这是我的代码:P 它并不漂亮,但它可以工作:P 我也接受了 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!";
            


        


    

【讨论】:

以上是关于将我的数据从 access 2003 db 获取到 c# 的问题(dbReader.GetString 错误)的主要内容,如果未能解决你的问题,请参考以下文章

ASP - 从 MS Access DB 获取记录时遇到日期格式(在 WHERE 子句中)

无法将我的站点连接到服务器上的 Access DB

从 db 获取数据到 js 数组

如何将数据从 ms-access 或 excel 导出到 IBM DB2 I-Series 数据库?

从 Access 2000/2003 迁移到 Access 2010

无法从 Access DB 查询中检索数据到我的 VB 程序