Строка подключения SQL для Microsoft Access 2010 .ACCDB - PullRequest
6 голосов
/ 14 октября 2011

Я делаю простую форму входа, используя winforms и доступ к базе данных 2010 (.accdb) в C #.

У меня есть следующий код, и кажется, что строка подключения неверна.Я попытался поиск и обнаружил, что .Jet для доступа 07 ??но, похоже, это тоже не работает.Я любитель в базах данных (код от MSDN).У меня возникли проблемы с пониманием, что мне следует использовать и для этого примера.

имя таблицы доступа: хаха

ID (PK)  |   password
-----------------------
   1     |   testing
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\BC207\test.accdb");
        System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand();

        comm.CommandText = "SELECT HAHA(*) FROM password";
        comm.CommandType = CommandType.Text;
        comm.Connection = conn;

        conn.Open();

        Object returnValue = comm.ExecuteScalar();
        conn.Close();

        MessageBox.Show((string)returnValue);

отредактировано: имя таблицы - пароль, аполе, которое я хочу получить это значение: ID.

SQL-оператор, я написал его как: SELECT ID FROM password

и да, только одна запись только в одном поле таблицы в качестве первичного ключа.

В любом случае проблема заключается в том, что программа зависает при выполнении в первой строке
-> Keyword not supported: 'provider'.

, поэтому я решил, что у меня неверная строка подключения ..

Ответы [ 4 ]

7 голосов
/ 14 октября 2011

Для баз данных Acces (.mdb, .accdb и т. Д.) Вы хотите использовать OleDbConnection , а не SqlConnection (SQL Server), например:

conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\BC207\test.accdb")
2 голосов
/ 14 октября 2011

Редактировать : как указано, для доступа следует использовать OleDbConnection, а не SqlConnection ...

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

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

using (var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\BC207\test.accdb"))
using (var comm = conn.CreateCommand())
{
    comm.CommandText = "SELECT password FROM HAHA";
    comm.CommandType = CommandType.Text;

    conn.Open();

    var returnValue = comm.ExecuteScalar();

    MessageBox.Show(returnValue.ToString());
}

Редактировать: Вы уверены, что таблица HAHA содержит только одну строку?Поскольку ExecuteScalar возвращает только одно значение, если вы хотите получить 1 столбец, но из множества записей, вы можете использовать DataReader или DataSet ...

0 голосов
/ 14 октября 2011

Ваш оператор SQL должен быть,

SELECT * from HAHA

ИЛИ

 SELECT [Password] From HAHA

EDIT:

Вы должны изменить ConnectionString .

0 голосов
/ 14 октября 2011
comm.CommandText = "SELECT HAHA(*) FROM password";

Это неправильно.

«ВЫБЕРИТЕ пароль ОТ HAHA»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...