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

如何用C#查询SQL数据库,仅展示登录用户的历史支出记录?

解决方案

首先得确认你的ExpensesTbl里有能关联到用户的字段——比如UserName(存储登录用户名)或者UserID(推荐用这个,因为用户名可能被修改),这是实现用户数据隔离的前提。

核心逻辑

给SQL语句添加WHERE子句筛选当前登录用户的记录,但一定要用参数化查询,绝对不能直接把用户名拼进SQL字符串里,否则会引发严重的SQL注入漏洞。

具体实现步骤

  1. 登录后保存用户标识
    登录验证通过后,把当前用户的用户名(或用户ID)存储起来,比如放到Session中:
// 假设登录时已验证通过,拿到合法的userName
Session["CurrentUserName"] = userName;
  1. 编写参数化查询代码
    从存储的用户标识中取值,作为参数传入SQL语句:
// 获取当前登录用户的用户名
string currentUserName = Session["CurrentUserName"].ToString();

// 构建参数化SQL语句
string sqlQuery = "SELECT * FROM ExpensesTbl WHERE UserName = @UserName";

// 数据库连接操作示例(使用SqlClient)
using (SqlConnection conn = new SqlConnection("你的数据库连接字符串"))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
    {
        // 添加参数,避免SQL注入风险
        cmd.Parameters.AddWithValue("@UserName", currentUserName);
        
        // 执行查询并读取结果
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 处理当前用户的每条支出记录
                // 示例:读取支出金额和日期
                decimal amount = reader.GetDecimal(reader.GetOrdinal("Amount"));
                DateTime expenseDate = reader.GetDateTime(reader.GetOrdinal("ExpenseDate"));
                // 其他字段按需处理
            }
        }
    }
}

更稳妥的UserID关联方案

如果你的系统有独立的用户表(比如UsersTbl),里面有唯一的UserID字段,那么ExpensesTbl最好用UserID关联用户,比用户名更稳定:

// 登录时从用户表查询到当前用户的ID并存入Session
int currentUserId = 123; // 实际值从数据库查询获取
Session["CurrentUserId"] = currentUserId;

// 对应的参数化SQL语句
string sqlQuery = "SELECT * FROM ExpensesTbl WHERE UserID = @UserID";

// 传入参数
cmd.Parameters.AddWithValue("@UserID", currentUserId);

关键注意事项

  • 绝对禁止直接拼接SQL字符串,比如"SELECT * FROM ExpensesTbl WHERE UserName = '" + currentUserName + "'"——这种写法会被黑客利用SQL注入攻击,窃取或篡改数据库数据。
  • 确认ExpensesTbl中的关联字段与登录用户的标识完全匹配,注意数据库的大小写敏感设置(比如SQL Server默认不区分,MySQL可能区分),避免出现查询不到数据的情况。

内容的提问来源于stack exchange,提问作者Joseph OConnell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:50:21