1

使用网站一段时间后,加载内容等。此消息显示“填充:SelectCommand.Connection 属性尚未初始化”!我认为这是因为 sql 连接,但不确定......我想知道我能做些什么来防止这种情况发生,每次发生这种情况我都必须上传一个文件(SQL 类,建立连接)和网站再次开始工作。

我的 SQL 连接:

public class SQL
{

    SqlCommand comandos;
    public SqlConnection sql()
    {
        string Server = @"server"; 
        string Username = "user"; 
        string Password = "pass"; 
        string Database = "database";
        string ConnectionString = "Data Source=" + Server + ";";
        ConnectionString += "User ID=" + Username + ";";
        ConnectionString += "Password=" + Password + ";";
        ConnectionString += "Initial Catalog=" + Database;

        SqlConnection Connection = new SqlConnection();
        try
        {
            Connection.ConnectionString = ConnectionString;
            Connection.Open();
            return Connection;
        }
        catch (Exception)
        {
            if (Connection != null)
            {
                Connection.Dispose();
        }
        return null;
        }
    }

    public void FazerComando(string comando)
    {
        comandos = new SqlCommand(comando, sql());
        comandos.ExecuteNonQuery();
    }

    public DataTable Execute(string comando)
    {
        SqlDataAdapter SQLDataAdapter = new SqlDataAdapter(comando, sql());
        DataTable dtResult = new DataTable();
        SQLDataAdapter.Fill(dtResult);
        return dtResult;
    }
}
4

2 回答 2

3

这可能与您的问题有关,但无论如何,这是应该解决的问题:当您完成连接时,您并没有处理它们。你应该使用using

    public void FazerComando(string comando)
    {
        using (var conn = sql())
        {
            comandos = new SqlCommand(comando, conn);
            comandos.ExecuteNonQuery();
        }
    }
    public DataTable Execute(string comando)
    {
        using (var conn = sql())
        {
            SqlDataAdapter SQLDataAdapter = new SqlDataAdapter(comando, conn);
            DataTable dtResult = new DataTable();
            SQLDataAdapter.Fill(dtResult);
            return dtResult;
        }
    }
于 2012-06-17T14:31:29.327 回答
1

我以前从未采取过这种方法。我们通常只在 web config 中使用连接字符串,特别是 linq,它工作得很好。我建议您查看http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspx并跟踪。您应该找到推荐的连接最佳实践的一个很好的例子。然后将在您的应用程序的第一次启动时读取连接字符串,并且使用连接池(v imortant)以达到最佳效果。

哦,你没有处理你的连接,当内存使用量变得太大时,这将导致内存泄漏和 iis 清除你的应用程序池 - 所有这些都不好

正如另一位受访者所说,当我在查找 baet prac 链接时...

高温高压

于 2012-06-17T14:46:51.407 回答