如何在C#中判断存储DataTable的Session变量是否为空
判断Session中的DataTable是否为null或空的正确方式
嘿,看你的代码片段,你现在是想判断Session["tblItems"]里的DataTable是不是null或者空表对吧?首先得指出你原来代码里的一个小问题:你用!string.IsNullOrEmpty(Session["tblItems"] as string)来判断是不对的,因为Session里存的是DataTable对象,不是字符串,as string会直接返回null,这个条件永远不成立,导致你每次都会新建空表,根本读不到之前存在Session里的数据。
下面给你梳理正确的判断逻辑,分三步来:
- 先判断Session变量本身是否存在:如果
Session["tblItems"]是null,说明这个Session变量还没被初始化过。 - 安全强转为DataTable:用
as关键字强转比直接强制类型转换更安全,万一Session里存的不是DataTable类型,as会返回null而不是抛出异常。 - 判断DataTable是否为空:这里的“空”一般指没有数据行,所以检查
Rows.Count == 0;如果需要严格判断连列都没有的空表,可以再加Columns.Count == 0。
给你写个完整的判断示例:
// 第一步:检查Session变量是否存在 if (Session["tblItems"] == null) { // 情况1:Session里还没有这个DataTable // 这里可以初始化新的DataTable或者做其他处理 } else { // 第二步:安全强转成DataTable DataTable dt = Session["tblItems"] as DataTable; if (dt == null) { // 情况2:Session里的内容不是DataTable类型 // 可以抛出异常或者重新初始化 } else if (dt.Rows.Count == 0) { // 情况3:DataTable存在,但没有数据行(空表) } else { // 情况4:DataTable存在且有数据,执行你的业务逻辑 } }
再结合你的代码片段,修正后的完整代码大概是这样:
public JsonResult SaveItemToTable(string itemCode, int quantity, int Division) { try { DataTable dt = null; // 先判断Session中的tblItems是否存在 if (Session["tblItems"] != null) { dt = Session["tblItems"] as DataTable; } // 如果dt是null,初始化新的DataTable并添加必要的列 if (dt == null) { dt = new DataTable("tblItems1"); dt.Columns.Add("ItemCode", typeof(string)); dt.Columns.Add("Quantity", typeof(int)); dt.Columns.Add("Division", typeof(int)); } // 检查是否已存在相同ItemCode的行 DataRow[] existingRows = dt.Select($"ItemCode = '{itemCode}'"); if (existingRows.Length > 0) { // 存在相同ItemCode,这里可以更新数量,比如累加 foreach (DataRow row in existingRows) { row["Quantity"] = (int)row["Quantity"] + quantity; } } else { // 不存在则添加新行 DataRow newRow = dt.NewRow(); newRow["ItemCode"] = itemCode; newRow["Quantity"] = quantity; newRow["Division"] = Division; dt.Rows.Add(newRow); } // 把更新后的DataTable存回Session Session["tblItems"] = dt; return Json(new { success = true, message = "操作成功" }); } catch (Exception ex) { return Json(new { success = false, message = ex.Message }); } }
这样就能正确判断Session里的DataTable状态,不会再出现每次都新建空表的问题啦。
内容的提问来源于stack exchange,提问作者user5686005
相关产品推荐
相关产品推荐

