0

見つけたさまざまな解決策を試しましたが、それらを適切に実装する方法がわからないか、単に機能しません。特定の注文番号のテーブルを検索できるようにするメソッドがあり、残りの行はグリッドビューに表示されます。ただし、テーブルに存在しない注文番号を入力すると、サーバー エラー/例外が発生する可能性があります。検索が完了する前または検索が完了する間に、データベースに存在しない注文番号が検索された場合に、代わりにエラーを作成できるようにするにはどうすればよいですか?

ms access データベース、C#、および ASP を使用しています。

ここに私が取り組んでいるコードの一部があります:

注文テーブルを検索する方法:

public static dsOrder SearchOrder(string database, string orderNum)
{
    dsOrder DS;
    OleDbConnection sqlConn;
    OleDbDataAdapter sqlDA;

    sqlConn = new OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + database);

    DS = new dsOrder();

    sqlDA = new OleDbDataAdapter("select * from [Order] where order_num='" + orderNum + "'" , sqlConn);

    sqlDA.Fill(DS.Order);

    return DS;
}

そして、その方法を使用して:

protected void btnSearch_Click(object sender, EventArgs e)
{
    Session["OrderNum"] = txtSearch.Text;
    Session["ddl"] = ddlSearch.Text;


    if (Session["ddl"].ToString() == "Order")
    {
        dsOrder dataSet2;

        dataSet2 = Operations.SearchOrder(Server.MapPath("wsc_database.accdb"), Session["OrderNum"].ToString());

        grdSearch.DataSource = dataSet2.Tables["Order"];

        grdSearch.DataBind();

    }

try/catch を実行する必要がありますか?

誰が私を助けることができるか、前もって大いに感謝します!

4

2 に答える 2

2

DataSetが空かどうかを確認するだけです。

if (dataSet2 == null || dataSet2.Tables.Count == 0 || dataSet2.Tables["Order"] == null || dataSet2.Tables["Order"].Rows.Count == 0)
{
    //display error to user
}
else
{
    // your code to populate grid 
}

エラーを表示したくない場合は、GridViewにデータを入力する前にこのチェックを入れてください

if (dataSet2.Tables != null && dataSet2.Tables["Order"] != null)
{
    // your code to populate grid
}
于 2012-06-13T01:46:13.517 に答える
0

データグリッドを埋めるときに別のアプローチを使用し、常に次のようにパラメーターを使用します。

public static DataTable GetGridDatasource(string database, string ordnum) {
  using (OleDbConnection con = new OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=" + database))
  {
    con.Open();
    OleDbCommand cmd = con.CreateCommand();
    cmd.CommandText = "select * from [Order] where order_num=[OrderNumber]";
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("OrderNumber", ordnum);
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
  }
}
protected void btnSearch_Click(object sender, EventArgs e)
{
  Session["OrderNum"] = txtSearch.Text;
  Session["ddl"] = ddlSearch.Text;


  if (Session["ddl"].ToString() == "Order")
  {
    grdSearch.DataSource = GetGridDatasource(Server.MapPath("wsc_database.accdb"), Session["OrderNum"].ToString());

  }
}
于 2012-06-13T01:58:18.447 に答える