执行时,SqlConnection状态始终处于关闭状态

时间:2014-06-19 18:43:02

标签: c# sql ms-access

我正在尝试使用SqlConnectionSqlCommand对象建立简单的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=********;"/>

但是当我收到此错误时:

Error Image

然后查看连接字符串对象,字符串如下所示:

"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;
}

我究竟做错了什么?

1 个答案:

答案 0 :(得分:7)

异常消息确切地告诉您问题是什么 - 您的连接未打开。您只需在执行命令之前打开连接:

conn.Open();
BTW,一个好的模式是在处理SQL连接时使用using块,以确保它被正确处理:

using (var conn = GetConnection())
{
    using (var comm = xxxxxxx)
    {
        conn.Open();
        using (var rdr = comm.ExecuteReader())
        {
            // xxxxx
        }
    }
}

您不必专门关闭任何内容 - using模式会为您完成所有这些。