1

しばらくすると、Webサイトの使用、コンテンツの読み込みなどが行われます。このメッセージには、「Fill:SelectCommand.Connectionプロパティが初期化されていません」と表示されます。これはSQL接続が原因だと思いますが、よくわかりません...これを防ぐために何ができるか知りたいのですが、これが発生するたびに、ファイル(SQLクラス、接続を確立する)をアップロードする必要があります。 Webサイトが再び機能し始めます。

私の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構成で接続文字列を使用します。特にlinqを使用すると、非常にうまく機能します。http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspxをご覧になり、トレイルをたどることをお勧めします。接続に推奨されるベストプラクティスの良い例を見つける必要があります。その後、接続文字列がアプリの最初の起動時に読み取られ、接続プール(v imortant)が最も効果的に使用されます。

ああ、あなたは接続を破棄していません。これにより、メモリの使用量が大きくなりすぎると、メモリネギとIISがアプリプールをクリアします-すべてv悪い

他の回答者が私がbaetpracリンクを調べている間に言ったように...

HTH

于 2012-06-17T14:46:51.407 に答える