Не удается записать в файл Microsoft Access с помощью SQL (OLEDB) C#

Я понимаю, что это можно считать дублирующим вопросом, но я в тупике и не знаю, что я делаю не так, мне нужна помощь. В дублирующемся вопросе говорилось об использовании OLEDB для записи в файл Microsoft Access, где, как и раньше, я использовал соединение SQL для выполнения своей задачи. Насколько я могу судить, нет синтаксических, логических или ошибок времени выполнения, и у Visual Studios тоже нет проблем.

Когда я запускаю код и иду, чтобы добавить новую запись в таблицу базы данных Microsoft Access, он говорит, что это сработало, но когда я иду и смотрю на файл, там НИЧЕГО нет. Кто-нибудь, пожалуйста, помогите мне, я просмотрел все ссылки, все веб-страницы, все поисковые системы и не знаю, что не так. Я хотел бы узнать, что не так и как это исправить, чтобы мне больше никогда не приходилось просить о помощи.

В настоящее время я учусь в колледже и работаю над групповым заданием. Наша задача — создать окно, которое будет принимать данные от пользователя, а затем добавлять их в качестве записи в файл Microsoft Access, как если бы это была база данных SQL.

Проблема, с которой мы сталкиваемся, заключается в том, что мы пытаемся добавить новую запись в локальный файл Microsoft Access в таблице с именем Artist. Раньше я подключался к реальному SQL-серверу, и никто другой в моей группе не делал этого, что еще хуже, никто не делал этого с помощью файла Microsoft Access на нашем ПК.

Я добавил базу данных (файл Microsoft Access) в Visual Studios с помощью мастера настройки базы данных. Сначала я использовал для этого прямой SQL, а затем мне сказали, что для этого мне нужно использовать OLEDB. ТАК Я реализовал в коде, и по какой-то причине я все еще не могу заставить его работать. Если кто-нибудь может дать мне руку и сказать мне, что я делаю неправильно, я был бы очень признателен.

Детали, которые я считаю важными для тех, кто может мне помочь:

Имя таблицы, в которую я пытаюсь добавить новую запись: Artist

Имя файла Microsoft Access: Kays.accdb

Расположение файла Microsoft Access: C:\KayDB\Kays.accdb (локальный компьютер)

Еще раз я был бы очень признателен за любую помощь, которую кто-либо может мне дать. Мне действительно любопытно, почему код не работает, пожалуйста, помогите мне понять.

Мой код выглядит следующим образом:

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

namespace Kay
{
public partial class Kay_Green : Form
{

    string Username,Fname, Mname, Lname, streetaddress, city, phonenumber, emailaddress, zipcode, taxIDnummber, state;

    string[,] SQLTable = new string[0, 10];

    public Kay_Green()
    {
        InitializeComponent();
    }

    private void btnSave_Click(object sender, EventArgs e)
    {//Save Button

        /*Upon clicking the save button, gather all info and save it into an temp array.
          Then send it to the SQL database.*/

        /*The order of the data in the array will be the same order in the SQL table.*/

        Fname = tbFirstName.Text;
        Mname = tbMiddleInitial.Text;
        Lname = tbLastName.Text;
        streetaddress = tbStreet.Text;
        city = tbCity.Text;
        state = cbState.Text;
        phonenumber = tbPhoneNumber.Text;
        emailaddress = tbEmailAddress.Text;
        zipcode = tbZipCode.Text;
        taxIDnummber = tbTaxID.Text;
        Username = tbUserName.Text;

        /*SQLTable[0,0] = taxIDnummber;
        SQLTable[0,1] = Fname;
        SQLTable[0,2] = Mname;
        SQLTable[0,3] = Lname;
        SQLTable[0,4] = streetaddress;
        SQLTable[0,5] = city;
        SQLTable[0,6] = state;
        SQLTable[0,7] = zipcode;
        SQLTable[0,8] = phonenumber;
        SQLTable[0,9] = emailaddress;*/



        /*Below is the details for the SQL connection*/

        string connectstring="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\KayDB\\Kays.accdb";
        OleDbConnection connection=new OleDbConnection(connectstring);
        OleDbCommand command;
        OleDbDataAdapter adapter;
        DataTable dt = new DataTable();


        string sql ="Insert into ARTIST values ('" + taxIDnummber + "','" 
            + emailaddress + "','" + Fname + "','" + Mname + "','"
            + Lname + "','" + phonenumber+"','"+ Username + "','" 
            + streetaddress + "','" + city + "','" +state+ "','" 
            + zipcode + "')";



        try
        {

            connection.Open();

            command = new OleDbCommand(sql, connection);

            MessageBox.Show("Connection Open And data added to table! ");


            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Can not open connection ! " + ex.StackTrace.ToString());

        }
        /*Above is the details for the SQL connection*/

    }

    private void btnCancel_Click(object sender, EventArgs e)
    {//Cancel Button
        tbCity.Clear();
        tbEmailAddress.Clear();
        tbFirstName.Clear();
        tbLastName.Clear();
        tbMiddleInitial.Clear();
        tbPhoneNumber.Clear();
        tbStreet.Clear();
        tbTaxID.Clear();
        tbZipCode.Clear();
        tbUserName.Clear();

        Close();//Go back to switchboard from here


    }

    private void btnClear_Click(object sender, EventArgs e)
    {//Clear button

        tbCity.Clear();
        tbEmailAddress.Clear();
        tbFirstName.Clear();
        tbLastName.Clear();
        tbMiddleInitial.Clear();
        tbPhoneNumber.Clear();
        tbStreet.Clear();
        tbTaxID.Clear();
        tbZipCode.Clear();
        tbUserName.Clear();
    }


}

}


person Spr89    schedule 28.03.2017    source источник
comment
stackoverflow.com/ вопросы/7764707/   -  person Trey    schedule 28.03.2017
comment
См. connectionstrings.com/access, чтобы создать правильную строку подключения. Используйте OleDbXxxxx для правильных типов подключения.   -  person Igor    schedule 28.03.2017
comment
Вы можете добавить провайдера подключения как Provider=Microsoft.ACE.OLEDB.14.0. Взгляните на это   -  person amyn    schedule 28.03.2017
comment
Извините за повторяющийся вопрос, этот конкретный результат не нашелся у меня, когда я искал. Я прочитаю это сейчас, чтобы увидеть, может ли это помочь мне. Спасибо за помощь @stuartd   -  person Spr89    schedule 28.03.2017
comment
@ Spr89 Spr89 первый ответ, который поможет вам: обратите внимание, что вам нужно использовать OleDbCommand и OleDbConnection для доступа.   -  person stuartd    schedule 28.03.2017
comment
@stuartd, я обновил свой код, и он работает, но не записывает в файл доступа. Любые мысли о том, почему?   -  person Spr89    schedule 29.03.2017
comment
Первое, что нужно сделать, это переименовать ваш файл MS Access в файловой системе и посмотреть, не появится ли ошибка. Это подтвердит, пишете ли вы в файл, о котором вы думаете. Если вы не получили ошибку, то следующее, что нужно сделать, это переименовать вашу таблицу и посмотреть, не появится ли ошибка.   -  person Nick.McDermaid    schedule 29.03.2017
comment
@Nick.McDermaid, спасибо за совет по устранению неполадок, который некоторое время не приходил мне в голову. Я изменил имя файла, и теперь трассировка стека говорит, что у меня проблема в строке 78 (connection.Open()). Глядя на то, что задействовано в этой строке кода, ваш тест сработал. Visual Studios видит файл, но я все еще не могу в него записать. Любые другие мысли/предложения? Я был бы более чем счастлив слушать.   -  person Spr89    schedule 29.03.2017
comment
Я просматриваю ваш код. На самом деле вы нигде не выполняете SQL. Вы строите строку, но не запускаете ее. Я думаю, вы пропустили command.execute или что-то в этом роде   -  person Nick.McDermaid    schedule 29.03.2017
comment
Это точно не дубликат. Вам нужно вызвать command.ExecuteNonQuery, чтобы фактически выполнить ваш командный объект. Это не имеет ничего общего со строками подключения.   -  person Nick.McDermaid    schedule 29.03.2017
comment
@Nick.McDermaid Спасибо, я тоже так думаю по поводу моего вопроса :-). Эта команда, похоже, используется с System.Data.SqlClient; (или, по крайней мере, так говорит Интернет), можно ли использовать его точно так же с System.Data.OleDb;?   -  person Spr89    schedule 29.03.2017
comment
Я не знаю. Я бы просто погуглил. Вы должны попробовать и посмотреть. Я знаю, что вам нужно что-то запустить, чтобы выполнить вашу команду. Гугл подскажет какой. Давайте устроим гонку Google и посмотрим   -  person Nick.McDermaid    schedule 29.03.2017
comment
Мой оригинальный google открыл эту страницу: msdn.microsoft.com/en-us/library/, в котором говорится, что это из пространства имен System.Data.OleDb   -  person Nick.McDermaid    schedule 29.03.2017


Ответы (1)


Этот код

command = new OleDbCommand(sql, connection);

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

вам нужно запустить это после:

command.ExecuteNonQuery();

Это не имеет ничего общего со строками подключения

person Nick.McDermaid    schedule 29.03.2017