Помогите кому-нибудь новичку в переменных C#

Я пытаюсь сохранить данные в базе данных нажатием кнопки, но переменные кажутся частными по своей природе. Я попытался переместиться туда, где они определены, но, похоже, это вызывает другие ошибки.

Учитывая исправление, почему это было исправлено таким образом?

Код следует.

namespace enable
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.123.5\Share\Matt\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            OleDbDataAdapter adapter = new OleDbDataAdapter(strSQL, favouriteConnection);
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(adapter);
            DataTable dTable = new DataTable();
            adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            adapter.Update(dTable);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }
    }
}

Помечено как я действительно не думаю, что это (вопрос / решение) о MS Access! :)

Adhip Gupta 30.09.2008 23:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
981
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Обновление: [знак] Я тоже забыл переместить Table в класс ...

namespace enable
{    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.123.5\Share\Matt\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            m_Adapter = new OleDbDataAdapter(strSQL, favouriteConnection)l
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(m_Adapter);
            dTable = new DataTable();
            m_Adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            m_Adapter.Update(dTable);            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_Adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }

        OleDbDataAdapter m_Adapter;
        DataTable dTable;
    }
}

У вас есть OleDbDataAdapter в блоке пространства имен.

FlySwat 30.09.2008 23:01

да, вот что происходит, когда я использую Блокнот для редактирования кода ... :-)

Franci Penov 30.09.2008 23:03
Ответ принят как подходящий

Вы объявляете dTable и adapter в конструкторе, поэтому он выходит из области видимости, как только конструктор будет завершен.

Вы хотите переместить объявления переменных в основной класс, например:

public partial class Form1 : Form
{
    private DataTable dTable;
    private OleDbDataAdapter adapter;

    Public Form1()
    {
         ... your setup here ...
         dTable = new DataTable();
         ... etc ...
    }
}

Объяснение: в основном вы говорите: «Дайте мне объект адаптера, который я буду использовать в этом методе (конструкторе)». Подразумевается, что когда метод завершается, он вам больше не нужен. Если вы сделаете то, что рекомендовано, вы скажете: «Я буду использовать объект адаптера в этом классе». Ключевое слово для поиска - это область действия.

George Mauer 30.09.2008 23:06

адаптер привязан к конструктору Form1, а не к самому классу.

Переместите адаптер и dtable в закрытые члены класса.

namespace enable
{    
    public partial class Form1 : Form
    {

    OleDbDataAdapter adapter;
    DataTable dTable = new DataTable();

        public Form1()
        {
            InitializeComponent();
            OleDbConnection favouriteConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\192.168.123.5\Share\Matt\BugTypes.mdb");
            string strSQL = "SELECT CategoryName, Show " + "FROM [Categories] WHERE Show = 'Yes' " + "ORDER BY CategoryName";
            adapter = new OleDbDataAdapter(strSQL, favouriteConnection);
            OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(adapter);
            adapter.Fill(dTable);
            BindingSource bSource = new BindingSource();
            bSource.DataSource = dTable;
            dataGridView1.DataSource = bSource;
            adapter.Update(dTable);            
        }
        private void button1_Click(object sender, EventArgs e)
        {
            adapter.Update(dTable);//this is the button that needs to do the save, but can't see the variables.
        }
    }
}

Вам необходимо изменить DataAdapter и область dataTable, чтобы они были доступны для события метода нажатия кнопки. Если вы объявляете их в конструкторе, они не могут быть приняты другими методами, вам необходимо объявить их как поля объекта, чтобы они были «глобальными» для вашего экземпляра объекта.

Вам нужно выяснить, в какой области видимости нужна каждая переменная, у вас может быть локальная область видимости, то есть объявленная внутри метода или область видимости класса, объявленная вне метода.

адаптер и dTable объявляются в вашем конструкторе. Они оба должны быть «перемещены» из конструктора, чтобы получить объемную информацию для всего класса. Так же, как Фрэнси с адаптером.

Могут быть и другие ошибки, но их трудно угадать, если вы не опубликовали ошибку компилятора.

/ Йохан /

Другие вопросы по теме