OleDbConnection не получает команды извне

108
12 марта 2021, 06:40

Написал класс по примеру из https://stackoverflow.com/questions/13135321/how-to-create-a-method-in-a-class-that-would-connect-to-my-database-on-calling

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;
using System.Diagnostics;
namespace CntDscnt
{
    class Base_Class
    {
        public List<string> cnctVars = new List<string>();
        public OleDbConnection FlCnctn()
        {
            OleDbConnection con = new OleDbConnection();
            string DBPath = cnctVars[0];
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath ;
            return con;
        }
        public OleDbDataReader FlReader()
        {
            string strSQL = "SELECT * FROM table1";
            OleDbCommand command = new OleDbCommand(strSQL, FlCnctn());
            OleDbDataReader reader = command.ExecuteReader();
            return reader;
        }
        public void readDB()
        {
            while (FlReader().Read())
            {
                Debug.WriteLine((FlReader().GetInt32(0)) + " val");
            }
        }
    }
}

Вызываю из класса формы

using System;
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.Diagnostics;
namespace CntDscnt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Base_Class base_Class =  new Base_Class();
        OpenFileDialog OPF = new OpenFileDialog();
        private void Label1_Click(object sender, EventArgs e)
        {
            OPF.Filter = "accdb files (*.accdb)|*.accdb|All files (*.*)|*.*";
            if (OPF.ShowDialog() == DialogResult.OK)
            {
                label1.Text = OPF.FileName;
                base_Class.cnctVars.Add(OPF.FileName);
                //_Base_Class.cnctVars.Add(_OpenFileDialog.FileName);
                //
            }
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            base_Class.FlCnctn().Open();
        }
        private void Button2_Click(object sender, EventArgs e)
        {
            base_Class.FlCnctn().Close();
        }
        private void Button3_Click(object sender, EventArgs e)
        {
            Debug.WriteLine(base_Class.FlCnctn().State);
        }
        private void Button4_Click(object sender, EventArgs e)
        {
            base_Class.readDB();
        }
    }
}

Если вызывать в теле метода открыть соединение, то оно открывается и у возвращаемого OleDbConnection state == Open

public OleDbConnection FlCnctn()
{
    OleDbConnection con = new OleDbConnection();
    string DBPath = cnctVars[0];
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath;
    con.Open();
    return con;
}

А если вызывать так

base_Class.FlCnctn().Open();

то ничего не вызывается, но и компилятор не ругается, хотя State показывает при таком обращении правильно

Debug.WriteLine(base_Class.FlCnctn().State);

Вопроос то вот в чем, как правильно вызывать-то? В моем конкретном случае...

READ ALSO
C# Замена текста в PDF

C# Замена текста в PDF

Пользуюсь библиотекой ItextsharpМой код почему то не хочет работать, он то сохраняет файл, но не открывает или он вообще не создаётся

104
Entity добавляет к названию поля &ldquo;1&rdquo;

Entity добавляет к названию поля “1”

При добавлении миграции в таблицу дублируется поле (но в конце с 1):

88
WPF data binding

WPF data binding

Работал когда-то с wpf, прошел курс, написал проект и забылИ вот, опять имею с ним дело

78
SQL запрос по двум столбцам

SQL запрос по двум столбцам

Есть таблица tb_productsНадо воспроизвести поиск по двум столбцам: title и description

97