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

Omn*_*Owl 2 c# sql ms-access

我试图通过使用SqlConnectionSqlCommand对象建立一个简单的MS Access数据库连接.

正如您在这里看到的,我是如何建立连接的:

private SqlConnection GetConnection()
{
    String connStr = ConfigurationManager.ConnectionStrings[0].ConnectionString;
    SqlConnection conn = new SqlConnection(connStr);
    return conn;
}
Run Code Online (Sandbox Code Playgroud)

在你问之前,是的,我试图将这段代码移动到调用它的方法.没有改变什么.它仍然读取连接字符串错误.

连接字符串如下所示,位于App.config文件中:

<add name="ConnString" connectionString="Server=*.*.*.*;Database=familie;User Id=mfs;Password=********;"/>
Run Code Online (Sandbox Code Playgroud)

但是当我收到此错误时:

错误图片

并查看当时的连接字符串对象,字符串如下所示:

"data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
Run Code Online (Sandbox Code Playgroud)

我花了大约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;
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Joe*_*nos 7

异常消息可以准确地告诉您问题所在 - 您的连接未打开.您只需在执行命令之前打开连接:

conn.Open();
Run Code Online (Sandbox Code Playgroud)

顺便说一句,一个好的模式是using在处理SQL连接时使用一个块,以确保它被正确处理:

using (var conn = GetConnection())
{
    using (var comm = xxxxxxx)
    {
        conn.Open();
        using (var rdr = comm.ExecuteReader())
        {
            // xxxxx
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你不必专门关闭任何东西 - 这个using模式可以满足你的需求.