我正在尝试使用SqlConnection
和SqlCommand
对象建立简单的MS Access数据库连接。
正如您在这里看到的,我是如何进行连接的:
private SqlConnection GetConnection()
{
String connStr = ConfigurationManager.ConnectionStrings[0].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
return conn;
}
在你问之前,是的,我试图将这段代码移动到调用它的方法。没有改变任何事情。它仍然会错误地读取连接字符串。
连接字符串如下所示,位于App.config
文件中:
<add name="ConnString" connectionString="Server=*.*.*.*;Database=familie;User Id=mfs;Password=********;"/>
但是当我收到此错误时:
然后查看连接字符串对象,字符串如下所示:
"data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
我花了大约2个小时试图完成这项工作,去许多不同的网站找出我做错了什么,但我得到的信息是太旧,冲突或处理连接到本地数据库,这实际上是通过我的客户提供给我的代理的外部访问(TrustGate,如果有人应该问)
调用GetConnection()
的方法如下所示:
public Dictionary<int,String> GetPostNrList()
{
SqlConnection conn = GetConnection();
SqlCommand cmd = new SqlCommand("Execute dbo.HENT_POST_NR_LISTE", conn);
var reader = cmd.ExecuteReader();
Dictionary<int, String> liste = new Dictionary<int, string>();
while (reader.NextResult())
{
int post_nr = (int) reader.GetSqlInt32(0);
String by = reader.GetString(1);
liste.Add(post_nr, by);
}
CloseConnection(conn);
return liste;
}
我究竟做错了什么?
答案 0 :(得分:7)
异常消息确切地告诉您问题是什么 - 您的连接未打开。您只需在执行命令之前打开连接:
conn.Open();
BTW,一个好的模式是在处理SQL连接时使用using
块,以确保它被正确处理:
using (var conn = GetConnection())
{
using (var comm = xxxxxxx)
{
conn.Open();
using (var rdr = comm.ExecuteReader())
{
// xxxxx
}
}
}
您不必专门关闭任何内容 - using
模式会为您完成所有这些。