ADO.NET连接字符串错误

时间:2011-05-19 10:27:01

标签: c# .net asp.net ado.net

首先,我是C#编程的新手。 我创建了一个专用类,根据下面的代码从Visual Studio 2010中的Web服务应用程序的app.config获取连接字符串。

在构建代码时,我通过catch块获得以下错误:

  

“当前上下文中不存在名称'connection'。”

显然连接超出了范围。

  1. 如何避免此错误?
  2. 这里是否正确使用了Dispose方法?

  3. public class FCSConnection : IDisposable
    {
        public string GetDefaultConnectionString()
        {   
            string DefaultConnectionString = null;
            try
            {
                DefaultConnectionString = ConfigurationManager.AppSettings["ConnectionString"];
                SqlConnection connection = new SqlConnection(DefaultConnectionString);
                connection.Open();
                return DefaultConnectionString;
            }
            catch (Exception)
            {
                if (DefaultConnectionString != null)
                {
                    connection.Dispose();
                }
            }
            return DefaultConnectionString;
        }
    
        public void Dispose()
        {
            throw new NotImplementedException();
        }        
    }
    

2 个答案:

答案 0 :(得分:4)

确切的编译器消息是指您的catch声明:

connection.Dispose();

在这里,connection是一个未知名称,因为它是在try块内声明的。

至于你的整个代码,我认为这也是错误的。如果您希望FCSConnection类封装SQL连接,则应将connection声明为私有成员,然后将其置于Dispose()方法中。

答案 1 :(得分:3)

public class FCSConnection : IDisposable
{
    private SqlConnection connection = null;

    public string GetDefaultConnectionString()
    {   
        string defaultConnectionString = null;
        try
        {
            defaultConnectionString = ConfigurationManager.AppSettings["ConnectionString"];
            connection = new SqlConnection(defaultConnectionString);
            connection.Open(); // are you sure want to keep the connection being opened??
        }
        catch
        {
            Dispose();
        }
        return defaultConnectionString;
    }

    public void Dispose()
    {
        if (connection != null)
        {
            connection.Dispose();
            connection = null; // to avoid repeat dispose
        }
    }        
}