ahmed ch Ответов: 2

Oledbdatareader reader = comand. executereader (); ошибка в этой строке


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

namespace practice2
{
    public partial class Form1 : Form
    {
       private OleDbConnection connection = new OleDbConnection();
       
        public Form1()
        {
            InitializeComponent();
             connection.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\Ahmed ch\Documents\Database1.accdb;
            Persist Security Info = False;";
           
        }

      
        private void Form1_Load(object sender, EventArgs e)
        {
           try
            {
            connection.Open();
           
                OleDbCommand comand = new OleDbCommand();
                String query =  "select* from Sheet2"
                comand.CommandText = query;
                OleDbDataReader reader = comand.ExecuteReader();
                while (reader.Read())
                {
                     comboBox1.Items.Add(reader["ProductName"].ToString());
                }


                connection.Close();
               
            }
                catch(Exception ex)
            {
                MessageBox.Show("Error" + ex);
                
            }
           
       
        }}}


Что я уже пробовал:

я также устанавливаю драйвер oledb, MS Access database Engine X86, также X64 , но каждый раз приходит ошибка ,
OleDbDataReader reader = comand.ExecuteReader();
в этой строке

Karthik_Mahalingam

что такое сообщение об ошибке?

0x01AA

Вы забыли установить соединение с вашей OleDBCommand.

Кстати: я предпочитаю делать это так: OleDbCommand command = new OleDbCommand(sql, oleDbConnection);

ZurdoDev

Ошибка скажет вам и нам, в чем именно заключается проблема. Тогда Бинго, проблема решается быстрее, чем количество времени, которое вам потребовалось, чтобы спросить. ;)

2 Ответов

Рейтинг:
16

0x01AA

Исключение, которое вы получаете, скорее всего, " система.InvalidOperationException: ExecuteReader: свойство соединения не было инициализировано". Это потому, что вы забыли установить свойство соединения OleDBCOmmand.

private void Form1_Load(object sender, EventArgs e)
{
  try
  {
    connection.Open();

    OleDbCommand comand = new OleDbCommand();
    String query = "select* from Sheet2"
    comand.CommandText = query;
    comand.Connection = connection;  // <<<< set connection
    OleDbDataReader reader = comand.ExecuteReader();
  // ....
}


Karthik_Mahalingam

5, Хороший улов

0x01AA

Спасибо.

ahmed ch

Спасибо, ошибка решена таким образом

0x01AA

Добро пожаловать.

Рейтинг:
1

OriginalGriff

Две возможные проблемы: одна из них (как сказал 0x01AA) заключается в том, что команда не подключена ни к какой базе данных. Во - вторых, в вашей SQL - команде должен быть пробел между "SELECT" и " * " - это не обязательно, но это хорошая идея, особенно потому, что "SELECT *" в любом случае считается плохой идеей. Вы должны назвать свои столбцы в SELECT так, чтобы вы извлекали только те, которые вам нужны.
Кроме того, команды и соединения-это ограниченные ресурсы, и неплохо использовать блок using, чтобы обеспечить их закрытие и утилизацию по мере необходимости.

try
    {
    using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\Ahmed ch\Documents\Database1.accdb;Persist Security Info = False;";))
        {
        con.Open();
        using (OleDbCommand cmd = new OleDbCommand("SELECT ProductName FROM Sheet2", con))
            {
            using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                while (reader.Read())
                    {
                    comboBox1.Items.Add(reader["ProductName"].ToString());
                    }
                }
            }
        }
    }
catch(Exception ex)
    {
    MessageBox.Show("Error" + ex);
    }


0x01AA

5 за все подсказки.