当前位置:  开发笔记 > 编程语言 > 正文

为什么我在SQL Server中收到此数据库连接错误?

如何解决《为什么我在SQLServer中收到此数据库连接错误?》经验,为你挑选了1个好方法。

我是数据库编程的初学者,无法连接到我的数据库.我使用以下代码进行连接.

public class dbOpnClse
{
    SqlConnection con = new SqlConnection();
    public SqlConnection openConnection()
    {
        con.ConnectionString ="server=SERVERNAME;database=Test;uid=###;pwd=#####";
        con.Open();
        return con;
    }
    public void closeConnection()
    {
        con.Close();
    }
}

问题是我收到异常"不允许更改'ConnectionString'属性.连接的当前状态是打开的." 此连接代码中是否有任何错误?请帮忙!我正在使用C#.net 2005和SQL Server 2000



1> Joel Coehoor..:

我最好的猜测是你第二次调用openConnection时还没有关闭它,所以你试着设置一个已经打开的连接的connectionstring属性.这是不允许的.

相反,在.Net中,您希望您的openConnection()样式方法在每次调用时实际创建一个新连接,沿着工厂模式,以便可以正确处理连接.更像这样的东西:

private SqlConnection CreateConnection()
{
    //even better if the connection string is pulled from a config file
    var result = new SqlConnection("Your connection string here");
    result.Open();
    return result;
}

没有相应的"关闭"方法.相反,我们将依赖IDisposable模式来确保连接始终正确关闭.然后你将在这样的方法中使用该函数和连接:

public DataTable GetRecords(int SomeValue)
{
    var result = new DataTable();

    string sql = "SELECT * FROM [MyTable] WHERE [SomeIntColumn]= @SomeValue";

    using (var cn = CreateConnection() )
    using (var cmd = new SqlCommand(sql, cn) )   
    {
        cmd.Parameters.Add("@SomeValue", SqlDbType.Int).Value =  SomeValue;

        using (var rdr = cmd.ExecuteReader() )
        {
           result.Load(rdr);
        }
    }
    return result;  
}

这些using语句适用于实现IDisposable接口的任何对象,并且即使抛出异常,它们也可以保证您的连接处于关闭状态.

另请注意,我将CreateConnection()方法设为私有.这是因为这个类将成为您的数据访问层.通过将连接设为私有,您将强制执行一个良好的数据库层,其中与数据库通信的唯一方法是通过此类. 任何需要与数据库通信的代码都应该放在这里.如果此类开始变得太大,您可以将此方法标记internal为非私有,并将数据访问层移动到其自己的程序集中(Visual Studio中的单独项目).关键是现在限制您的方法接受参数的强类型输入.不要尝试构建一个允许直接传入sql的泛型方法.那种方式就是疯狂.

最后,永远不要永远不要通过sa帐户从您的应用程序连接到数据库,并将您的帐户详细信息发布到公共网站就不那么光明了.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有