用于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 。