microsoft access 2010 .accdb 的 SQL 连接字符串
Posted
技术标签:
【中文标题】microsoft access 2010 .accdb 的 SQL 连接字符串【英文标题】:SQL connection string for microsoft access 2010 .accdb 【发布时间】:2011-12-07 13:26:54 【问题描述】:我正在使用 winforms 做一个简单的登录表单,并在 C# 中访问 2010 数据库 (.accdb)。
我有以下代码,似乎连接字符串错误。我试过搜索,发现 .Jet 是用于访问 07 的??但这似乎也不起作用。 我是数据库的业余爱好者(代码来自 msdn)。我也很难理解我应该在这个例子中使用哪个。
访问表名:哈哈
身份证 (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'.
所以我认为我有一个错误的连接字符串..
【问题讨论】:
【参考方案1】:对于 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")
【讨论】:
我认为这种情况下的连接类型并不重要。该命令将被解析为reguardless ... 这是迄今为止唯一正确的答案。 @Killercam:SqlConnection
只适用于 SQL Server,这里根本不涉及 SQL Server,所以你的评论是错误的。 SqlConnection
不适用于 MS Access!
@Killercam 你是从哪里得到这个想法的?
@Killercam - OleDbConnection 打开...使用 OLE DB 提供程序的 OLE DB 连接。它不假设任何网络或底层系统。它与 SQL Server 没有任何关系(实际上有一个用于 SQL Server 的 OLE DB 提供程序,但在 .NET 中编码时我们更喜欢 ADO.NET SqlConnection)。访问文件(.mdb 等)可通过 JET 驱动程序访问,该驱动程序也是一个 OLE DB 提供程序。这就是连接字符串需要 Provider 密钥的原因。没有 ADO.NET 访问提供程序。 OleDbConnection 不是 SqlConnection 的子类(OleDbProvider 不存在)。
@Simon Mourier +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...
【讨论】:
啊,是的,我的整个表只包含一个字段中的一条记录,用于存储我的程序引用的通用密码。此后,我将表名更改为“密码”,将字段名更改为“ID”,这也是主键。【参考方案3】:comm.CommandText = "SELECT HAHA(*) FROM password";
错了。
“从哈哈中选择密码”
【讨论】:
啊,是的,我的 SQL 语句是错误的,我已经更改了它。但问题出在代码的第一行,而不是 sql 语句(到目前为止还没有执行哈哈)【参考方案4】:你的 SQL 语句应该是,
SELECT * from HAHA
或
SELECT [Password] From HAHA
编辑:
您应该更改ConnectionString。
【讨论】:
啊,是的,我的 SQL 语句是错误的,我已经更改了它。但问题出在代码的第一行,而不是 sql 语句(到目前为止还没有执行哈哈) @user776914 - 您必须设置适当的连接字符串。我已经编辑了我的帖子。以上是关于microsoft access 2010 .accdb 的 SQL 连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access 2010 - 外键作为下拉菜单
在 Microsoft Access 2010 数据宏中使用变量数据