我正在使用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'.
所以我认为我的连接字符串错误..
答案 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)