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:查询和表单

在 Microsoft Access 2010 数据宏中使用变量数据

Microsoft Access 2010 中的自定义查询

整个表搜索表单 - Microsoft Access 2010

在 microsoft access 2010 表单和报告中显示多个附件