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

C#对接MS Access数据库无法筛选当前登录学生用户记录如何解决

解决方案

1. 存储当前登录用户ID

登录成功后,需要把当前登录的学生ID(即你登录时输入的用户名,对应表中s_id字段)存储在可被数据展示模块访问的位置,示例如下:

// 示例:公共类中定义全局静态变量存储登录用户信息
public static class LoginInfo
{
    // 登录验证通过后,将当前用户的s_id赋值给该字段,比如你测试时输入的用户名50就赋值为50
    public static int CurrentUserId;
}

如果你是从登录窗体跳转到数据展示窗体,也可以通过窗体构造函数直接传递用户ID,无需使用全局静态变量。

2. 修改查询代码,增加过滤条件

原有SQL语句没有加筛选条件,所以会返回所有学生的关联数据,我们需要新增WHERE条件过滤当前用户,同时使用参数化查询避免SQL注入风险,修改后代码如下:

conn.Open();
// 新增WHERE条件,OleDb使用?作为参数占位符
string querySql = @"SELECT student.s_id, student.f_name, student.l_name, student.email, student.address, course.c_id, course.cname, resultdate.resultgrade 
FROM ((student INNER JOIN resultdate ON student.s_id = resultdate.s_id) 
INNER JOIN course ON resultdate.c_id = course.c_id)
WHERE student.s_id = ?";
OleDbDataAdapter sda = new OleDbDataAdapter(querySql, conn);
// 为SQL添加参数,参数值为之前存储的当前登录用户ID
sda.SelectCommand.Parameters.AddWithValue("?", LoginInfo.CurrentUserId);
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
conn.Close();

注:原有代码中定义的OleDbCommand cmd没有被实际使用,可以直接删除减少冗余。

注意事项

  • 如果你的s_id字段是字符串类型,存储用户ID和参数赋值时要对应改为字符串类型,保证和数据库字段类型匹配
  • OleDb参数是按顺序匹配的,如果你后续需要新增多个过滤条件,要保证添加参数的顺序和SQL中?占位符的出现顺序完全一致

内容的提问来源于stack exchange,提问作者Muhammad Fayzan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:04