свойство connectionstring не было инициализировано. c # Доступ к базе данных

c# ms-access connection-string access

570 просмотра

2 ответа

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

namespace WindowsFormsApplication3
{
    public partial class Form2 : Form

    {
        private OleDbConnection connection = new OleDbConnection();
        public Form2()
        {
            InitializeComponent();
            string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
            string path = (System.IO.Path.GetDirectoryName(executable));
            AppDomain.CurrentDomain.SetData("DataDirectory", path);
            OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;");


        }

        private void button4_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(); // Instantiate a Form3 object.
            f3.Show(); // Show Form3 and
            this.Close(); // closes the Form2 instance
        }

        private void button1_Click(object sender, EventArgs e)
        {

            try
            {

                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText= "INSERT into Dataaa ([FirstName],[LastName],[ICNO],[Address],[Loan],[Percent],[Payback],[StartDate],[EndDate],[Monthly],[PaymentType],[Remark]) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "')";

                command.ExecuteNonQuery();
                MessageBox.Show("Details have been Saved.");

            }
            catch (Exception ex)

            {

                MessageBox.Show("error " + ex);
            }
            finally
            {
            connection.Close();
            }

        }
Автор: Akash Gill Источник Размещён: 05.11.2019 03:11

Ответы (2)


1 плюс

Проблема в том, что вы никогда не передаете строку соединения в connectionсвойство, поэтому генерируется исключение.

В настоящее время вы инициализируете локальную переменную внутри конструктора, которая не используется. Все, что нужно, это удалить локальную переменную и просто инициализировать свойство правильной строкой соединения.

Чтобы решить эту проблему, просто измените ваш метод конструктора следующим образом:

public Form2()
{
    InitializeComponent();
    string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
    string path = (System.IO.Path.GetDirectoryName(executable));
    AppDomain.CurrentDomain.SetData("DataDirectory", path);

    this.connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;");
}

И удалите инициализацию для свойства, чтобы оно было следующим:

private OleDbConnection connection;

Как сказал Оуэн Полинг, вы открыты для атак с использованием SQL-инъекций, поэтому я настоятельно рекомендую вам просмотреть эту статью, чтобы не быть открытыми для атак. В основном, глядя на раздел параметризованных запросов статьи.

Автор: David Ford Размещён: 03.06.2016 11:19

0 плюса

У вас есть как личная переменная (с именем «соединение») для, так и локальная переменная (с именем «соединение») для OleDbConnection. Вы инициализируете последний строкой соединения, но используете первый для запуска вашей команды.

В вашем методе Form2 измените:

OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;");

чтобы:

connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;");

Также используйте параметры запроса для вашей команды, чтобы вы не были открыты для атак с использованием SQL-инъекций.

Автор: Owen Pauling Размещён: 03.06.2016 11:20
Вопросы из категории :
32x32