我想在asp.net web窗體應用程序中使用GridView設置ObjectDataSource。我打算使用爲ObjectDataSource選擇命令通過用存儲過程查詢數據庫,像這樣返回DataTable:ObjectDataSource存儲過程參數來自一個方法嗎?
public DataTable GetProductsById(string ids = null)
{
DataTable productDataTable = new DataTable();
// Stored procedure (sqldb server) is executed here
SqlCommand cmd = new SqlCommand("GetProductByIdsRML_CLR", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter myParam = new SqlParameter("@ids", SqlDbType.NVarChar);
myParam.Value = (ids);
cmd.Parameters.Add(myParam);
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = cmd;
dataAdapter.Fill(productDataTable);
return productDataTable;
}
該方法將作爲一個參數的字符串即以逗號分隔的產品ID的列表,該參數被傳遞給存儲過程,然後執行查詢。不過,我無法正確設置它,因爲通過代碼中的另一種方法將此輸入ids
傳遞給此方法。這裏存在這個問題,因爲當試圖設置ObjectDataSource時,它會詢問存儲過程的參數應該來自哪裏,但「另一種方法」不是一個選項。以下是我正在談論的內容:
這些選項似乎都沒有包含「此項目中的另一種方法」。如果有人知道在這種情況下要做什麼,那會很棒。另外,如果從存儲過程返回DataTable不是一個好主意,那也可以,我可以很容易地更改它,但問題仍然存在。謝謝!我覺得有一個非常簡單的解決方案...
感謝您的快速回復。我想過做這樣的事情(將它存儲在'Session'中),但我認爲它可能不是最好的想法,因爲這個參數將會是一串數千個字符的字符串,會話似乎不是最好的地方對於類似的東西... – akowalz
@akowalz,如果您願意,可以使用「Cookie」,但我不會說容易清理的數千字節的數據可能是一個問題。 –