C# 从会话存储和检索数据表

C# 从会话存储和检索数据表,c#,.net,C#,.net,如何在会话中存储数据表并在c#net中从会话中检索值?将数据表添加到会话中: DataTable Tissues = new DataTable(); Tissues = dal.returnTissues("TestID", "TestValue");// returnTissues("","") sample function for adding values Session.Add("Tissues", Tissues); 从会话中检索该数据表: DataTable Ti

如何在会话中存储数据表并在c#net中从会话中检索值?

将数据表添加到会话中:

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


您可以这样做,但在会话中存储DataSet对象不是很有效。如果你有一个有很多用户的web应用程序,它会很快阻塞你的服务器内存


如果您真的必须这样做,我建议您在不需要数据集时尽快将其从会话中删除。

这只是一个旁注,但通常您要做的是保持会话和ViewState的大小较小。我通常只在Session和ViewState中存储id和少量数据包

例如,如果要将大块数据从一个页面传递到另一个页面,可以在querystring中存储一个ID,并使用该ID从数据库或文件中获取数据


PS:但正如我所说,这可能与您的查询完全无关:)

在会话中存储
DataTable

DataTable dtTest = new DataTable();
Session["dtTest"] = dtTest; 
要从会话中检索数据表,请执行以下操作:

DataTable dt = (DataTable) Session["dtTest"];

一个非常常见问题的简单解决方案

                 // 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);
                    }
                }

会话[“BufferDatatable”]=dt;((DataTable)会话[“BufferDatatable”]).Rows.Add(titlelbl.Text,txtEnable.Text,txtValue.Text,txtValue.Text);解决了问题。在这种情况下,您可以提供指南吗?我认为这会影响应用程序/页面的性能,例如,如果datatable包含10000条记录。@Musikero31根据您使用它的方式,它可以提高网页的性能。
                 // 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);
                    }
                }