如何在会话中存储数据表并从c#.net?
中的会话中检索值答案 0 :(得分:23)
将数据表添加到会话中:
DataTable Tissues = new DataTable();
Tissues = dal.returnTissues("TestID", "TestValue");// returnTissues("","") sample function for adding values
Session.Add("Tissues", Tissues);
从会话中回复该数据表:
DataTable Tissues = Session["Tissues"] as DataTable
或
DataTable Tissues = (DataTable)Session["Tissues"];
答案 1 :(得分:2)
这只是一个侧面说明,但通常你想要做的是保持Session和ViewState的大小。我通常只在Session和ViewState中存储ID和少量数据包。
例如,如果要将大块数据从一个页面传递到另一个页面,可以在查询字符串中存储ID,并使用该ID从数据库或文件中获取数据。
PS:但就像我说的那样,这可能与你的查询完全无关:)
答案 2 :(得分:2)
在会话中存储DataTable
:
DataTable dtTest = new DataTable();
Session["dtTest"] = dtTest;
从会话中检索DataTable
:
DataTable dt = (DataTable) Session["dtTest"];
答案 3 :(得分:1)
您可以这样做,但在Session中存储DataSet对象效率不高。如果你有一个拥有大量用户的Web应用程序,它将很快阻塞你的服务器内存。
如果您真的必须这样做,我建议您在不需要DataSet时立即将其从会话中删除。
答案 4 :(得分:0)
一个非常常见问题的简单解决方案
// DECLARATION
HttpContext context = HttpContext.Current;
DataTable dt_ShoppingBasket = context.Session["Shopping_Basket"] as DataTable;
// TRY TO ADD rows with the info into the DataTable
try
{
// Add new Serial Code into DataTable dt_ShoppingBasket
dt_ShoppingBasket.Rows.Add(new_SerialCode.ToString());
// Assigns new DataTable to Session["Shopping_Basket"]
context.Session["Shopping_Basket"] = dt_ShoppingBasket;
}
catch (Exception)
{
// IF FAIL (EMPTY OR DOESN'T EXIST) -
// Create new Instance,
DataTable dt_ShoppingBasket= new DataTable();
// Add column and Row with the info
dt_ShoppingBasket.Columns.Add("Serial");
dt_ShoppingBasket.Rows.Add(new_SerialCode.ToString());
// Assigns new DataTable to Session["Shopping_Basket"]
context.Session["Shopping_Basket"] = dt_PanierCommande;
}
// PRINT TESTS
DataTable dt_To_Print = context.Session["Shopping_Basket"] as DataTable;
foreach (DataRow row in dt_To_Print.Rows)
{
foreach (var item in row.ItemArray)
{
Debug.WriteLine("DATATABLE IN SESSION: " + item);
}
}