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

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

我有以下代码,似乎连接字符串是错误的。 我试过搜索,发现.Jet用于访问07 ?? 但这似乎也没有用。 我是数据库的业余爱好者(代码来自msdn)。 我很难理解我应该在这个例子中使用哪个。

访问表名称:哈哈

 ID(PK)| 密码
 -----------------------
    1 | 测试
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'.

所以我想我有一个错误的连接字符串..

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

编辑 :正如所指出的,对于访问应该使用OleDbConnection ,而不是SqlConnection

您可以使用更紧凑的方式,并确保连接被关闭并在任何可能的情况下处理,即使抛出exception,也可以使用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 ……

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

这是不对的。

“从HAHA中选择密码”

你的SQL语句应该是,

 SELECT * from HAHA 

要么

  SELECT [Password] From HAHA 

编辑:

您应该更改ConnectionString 。