2012-06-13 27 views
0

我已經嘗試過各種解決方案,並且我不知道如何正確實施它們,或者它們根本無法工作。我有一種方法可以讓某人在表格中搜索特定的訂單號,然後該行的其餘部分將顯示在gridview中。但是,如果輸入的訂單號在表中不存在,那麼我可能會收到服務器錯誤/異常。我該如何做到這一點,以便在搜索之前或搜索過程中,如果搜索數據庫中不存在的訂單號,那麼我可以創建該錯誤?檢查數據集中是否存在使用C#和ASP的列值

我正在使用ms訪問數據庫,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(); 

    } 

我需要試一試/抓住?

非常感謝誰能夠幫助我!

+0

'Session [「ddl」]。ToString()',to避免冗餘,使用'ddlSearch.Text ==「訂單」' –

+1

我也會避免使用會話,如果它不被持續橫跨頁面。只需使用ViewState。 – fenix2222

+0

你是否在防範SQL注入?如果有人將sql放入你的txtSearch.Text會發生什麼? – Greg

回答

2

你可以簡單地做一個檢查,看看數據集是否爲空

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 
} 
+0

這工作奇蹟,非常感謝你! – Jeremiah

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()); 

    } 
} 
+0

非常好,非常感謝! – Jeremiah

相關問題