You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:41:40