0

マスターページでの私のc#コーディングは次のとおりです

DBLayer odb = new DBLayer();

SqlDataReader dr;

DataSet ds = new DataSet();

protected void Page_Load(object sender, EventArgs e)
{
    if (DropDownList1.SelectedItem.ToString() == "Commercial")
    {

        bind1();
    }
    else if (DropDownList1.SelectedItem.ToString() == "Residential")
    {
        bind2();
    }
    else
    {
        bind3();
    }
}
public void bind1()
{
    string query = "select * from commercialproperty";
    dr = odb.SelectMethod(query);
    if (dr.Read())
    {
        Label11.Text = dr[0].ToString();
        Label1.Text = dr[1].ToString();
        Label2.Text = dr[2].ToString();
        Label3.Text = dr[3].ToString();
        Label4.Text = dr[4].ToString();
        Label5.Text = dr[5].ToString();
        Label6.Text = dr[6].ToString();
        Label7.Text = dr[7].ToString();
        Label8.Text = dr[8].ToString();
        Label9.Text = dr[9].ToString();
        Label10.Text = dr[10].ToString();
    }
    else
    {
        Response.Write("<script>alert('Record Not Found')</script>");
    }
}

}

DBLayer.csの私のコードは次のとおりです

パブリッククラスDBLayer

{{

    public SqlConnection _SqlConnection;

    public SqlCommand _SqlCommand;

    public SqlDataAdapter _SqlDataAdapter;

    public SqlDataReader _SqlDataReader;

    public DataSet _DataSet;

public DBLayer()
{
}
    public int InsertEditDelete(string query)
    {
        int i;
        try
        {

            _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate");
            _SqlConnection.Open();
            _SqlCommand = new SqlCommand(query, _SqlConnection);
            i = _SqlCommand.ExecuteNonQuery();

        }
        catch (Exception ied)
        {
            i = -1;


        }
        finally
        {

            _SqlConnection.Dispose();
            _SqlCommand.Dispose();
            _SqlConnection.Close();

        }
        return i;
    }
    public DataSet DataAdapter(string query, string tname)
    {
        try
        {
            _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate");
            _SqlConnection.Open();
            _SqlDataAdapter = new SqlDataAdapter(query, _SqlConnection);

            _DataSet = new DataSet();
            _SqlDataAdapter.Fill(_DataSet,tname);


        }
        catch (Exception ds)
        {
            _DataSet  = null;

        }
        finally
        {
            _SqlConnection.Dispose();               
            _SqlConnection.Close();
        }
        return _DataSet;
    }
    public SqlDataReader SelectMethod(string query)
    {
        try
        {
            _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate");
            _SqlConnection.Open();
            _SqlCommand = new SqlCommand(query, _SqlConnection);
           _SqlDataReader  = _SqlCommand.ExecuteReader();
        }
        catch (Exception sm)
        {
         _SqlDataReader = null;

        }
        return _SqlDataReader;
    }  

}

Webサイトを実行すると、次の時点で爆発します。if(dr.Read())[エラーメッセージ:オブジェクト参照がオブジェクトのインスタンスに設定されていません。]

私は何が欠けていますか?私は一種の初心者です:この問題を解決するためのPヘルプはサイトを素晴らしい運営になりますありがとう

4

2 に答える 2

2

odbあなたのコードに何が含まれているのかわかりませんが、要点はSelectMethodnullを返すことです。

編集後、原因はあなたのtry / catchブロックのようSelectMethodです:おそらく例外が発生していて、何もしていないので、何が悪いのか理解できません:

try {
    // do DB stuff...
}
catch (Exception sm) { // What does this exception contain???
    _SqlDataReader = null;
}

デバッガーを使用してコードにステップインし、例外が何であるかを確認してください。それができない場合は、catchブロックを削除してください。ご覧のとおり、原因の失敗を隠しているだけですが、コードが魔法のように機能するわけではありません:)

于 2012-12-14T15:29:12.397 に答える
0

私はあなたのコードに少なくとも4つの問題を見ました1.あなたはあなたのコードであなたの例外を黙って飲み込みます、何の意味もありません。

try
    {
        _SqlConnection = new SqlConnection("server=.;user id=sa;password=sa;initial catalog=RealEstate");
        _SqlConnection.Open();
        _SqlCommand = new SqlCommand(query, _SqlConnection);
       _SqlDataReader  = _SqlCommand.ExecuteReader();
    }
    **catch (Exception sm)
    {
     _SqlDataReader = null;
    }**

2.接続を閉じる前に接続を破棄した場合、最後に例外がスローされます。

finally
    {
        _SqlConnection.Dispose();               
        _SqlConnection.Close();
    }

3.例外を飲み込んで何もしないのは最善の策ではなく、スタックトレースを失いました。

4 _sqlconnectionを設定し、IDisposableを実装せずにそれらのアンマネージオブジェクトをgloble変数にするのは適切ではありません。

最後に、例外がスローされたコード行にブレークポイントを設定し、コードを自分でデバッグしてみます。

于 2012-12-14T16:20:51.687 に答える