用于Microsoft Access 2010.accdb的SQL连接字符串

时间:2011-10-14 08:00:47

标签: c# sql winforms ms-access

我正在使用winforms进行简单的登录表单,并在C#中访问2010数据库(.accdb)。

我有以下代码,似乎连接字符串是错误的。我试过搜索,发现.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 个答案:

答案 0 :(得分:7)

对于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")

答案 1 :(得分:2)

修改:正如所指出的那样,应该使用访问权限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 ......

答案 2 :(得分:0)

comm.CommandText = "SELECT HAHA(*) FROM password";

这是错的。

“从HAHA中选择密码”

答案 3 :(得分:0)

你的SQL语句应该是,

SELECT * from HAHA

OR

 SELECT [Password] From HAHA

编辑:

您应该更改ConnectionString