Приложение c# windows с базой данных Access (accdb) не работает на других компьютерах после установки - PullRequest
0 голосов
/ 10 марта 2020

Я хочу вставить текст в свою базу данных Access (accdb) в C# - windows приложении проекта. "Accdb". Он корректно работает только на моем компьютере, если я запускаю exe-файл, который находится в папке с исходным кодом моего проекта, но проблема в том, что когда я создаю установочный файл и установил его, а затем запускаю программное обеспечение, он открывается, но когда я нажимаю на кнопку вставки, это не могло сработать. Проблема с базой данных (местоположение / доступ), но я не знаю, как я могу ее решить. Кто-нибудь знает, как решить эту проблему?

Ошибка: Произошло необработанное исключение в вашем приложении. ... "Необработанное исключение произошло в вашем приложении. Если вы нажмете" Продолжить ", приложение проигнорирует эту ошибку и попытается продолжить. Если вы нажмете" Выйти ", приложение будет закрыто немедленно. Подробную информацию о вызове просто смотрите в конце этого сообщения. отладка по времени (JIT) вместо этого диалогового окна.

************** Текст исключения ************** System.Data.OleDb.OleDbException (0x80004005): Операция muss eine aktualisierbare Abfrage verdenden. На System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr), ObjectDBDBT. System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult) в System.Data.OleDb.OleDbCommand.ExecuteCommand (поведение CommandBehavior, Object & executeResult)

enter image description here enter image description here

Вот мой код:

 public Form1()
    {
        InitializeComponent();
    }

    public static string GetDBConnection()
    {
        try
        {
            string dbExecPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Test11.accdb");
            return $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={ dbExecPath }";
        }
        catch (Exception)
        {
            return string.Empty;
        }
    }

   OleDbConnection con = new OleDbConnection(GetDBConnection());
   OleDbCommand cmd;

    private void button1_Click(object sender, EventArgs e)
    {

        OleDbCommand cmd = new OleDbCommand("insert into[Table](name, code) VALUES(@name, @code)", con);
            cmd.CommandType = CommandType.Text;

            cmd.Parameters.AddWithValue("@name", textBox1.Text);
             cmd.Parameters.AddWithValue("@code", textBox2.Text);

            con.Open();

            System.Windows.Forms.MessageBox.Show("An Item has been successfully added", "Caption", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

        int i = 0;
        i = cmd.ExecuteNonQuery();
        if (i > 0)
        {
            MessageBox.Show("Inserted");
            DisplayData();
        }

        else
        {
            MessageBox.Show("Not Inserted");
        }
        con.Close();
        ///////
    }

1 Ответ

1 голос
/ 10 марта 2020

В своем коде вы используете Assembly.getExecutingAssembly().Location, чтобы указать местоположение вашего .accdb-файла. Как только вы измените расположение исполняемого файла (.exe), значение, которое Assembly.getExecutingAssembly().Location вернет, изменится ( См. Документы MS ). Поэтому вам нужно убедиться, что ваш исполняемый файл и ваш .accdb-файл всегда находятся в одной папке. В противном случае невозможно установить соединение с вашей базой данных Access.

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

...