1

我已经为我创建的内部应用程序完成了设计、框架和大部分代码。我正在尝试添加一些功能,这些功能将转换为 3 种完全不同的形式,即访问、查看和更新​​存储在 Access 数据库中的数据,这些数据位于隐藏的网络驱动器上。

我的问题的相关信息如下...... 1)用户启动应用程序,然后收集并显示他们当前登录的用户名,并询问他们是否希望继续。2) 一旦他们选择继续,代码就会在 MS Access 数据库中搜索一个代理表,以查看是否为代理的名称创建了一条记录。3)如果记录存在(当前),表格将关闭,返回数据输入表格开始输入信息,只显示他们的用户名 4)如果记录不存在,它打开另一个表格,用户将在其中输入他们的详细信息,经理、班次开始和结束时间以及他们的 AgentID 5) 保存 Agent 详细信息后,应用程序返回到数据输入表单开始输入信息。

我希望用这段代码完成什么......在步骤 3)中,在成功找到与其用户名匹配的记录后,从 AgentID 列中的匹配行返回一个值。数据库有一个查找字段,将 AgentID 与其特定角色相匹配,稍后我将使用它来显示基于用户角色的替代名称表单。目前,我只想从相应的行中获取 AgentID,然后将值保存到我创建的静态类变量中,以供其他现有表单使用。

使用语句供参考

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Security.Principal;

我想弄清楚的代码在 If 函数中。代码将成功识别用户是否在 Agent 表中有条目,如果没有,则将用户发送到表单以创建条目。

private void button1_Click(object sender, EventArgs e)
    {
        // set FNameLabel to user's name without domain
        FNameLabel.Text = WindowsIdentity.GetCurrent().Name.Split('\\')[1];
        // create OleDb connection and command, @name for agent name variable
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.jet.oledb.4.0;data source=\\myserver\hidden$\database.mdb");
        OleDbCommand cmd = new OleDbCommand("SELECT * FROM Agent WHERE AgentName=@name");
        // create command connection and set parameters
        cmd.Connection = con;
        cmd.Parameters.AddWithValue("@name", FNameLabel.Text);
        con.Open();
        OleDbDataReader read = cmd.ExecuteReader();
        // If there is a record that matches Agent Name, return to previous form
        if (read.Read() == true)
        {
            // MessageBox.Show("agent name in database");

            // If Agent Name matches, return Agent ID, passed to custom class variable
            // Class variable for Agent ID
            // AgentID.Var = [some variable that contains AgentID where AgentName = current user]
            this.Close();
            return;

        }
        // If there is no record that matches Agent Name, open form to enter Agent details
        // MessageBox.Show("agent name NOT in database");
        AgentInfo agents = new AgentInfo();
        agents.ShowDialog();
        this.Close();



    }

类变量工作顺利

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DataEntry
{
static class AgentID
{
    private static string agentid = "";

    public static string Var
    {
        get 
        { 
            return agentid; 
        }
        set 
        { 
            agentid = value; 
        }
    }
}

}

4

1 回答 1

1

我最终通过添加 1 行代码并更改我的 SELECT 语句解决了这个问题

OleDbCommand cmd = new OleDbCommand("SELECT AgentName, AgentID FROM Agent WHERE AgentName=@name");

然后我在 If 函数中添加了这一行

AgentID.Var = read[1].ToString();

通过将 * 更改为我想要的两列(AgentName 和 AgentID),它将它们分配给第 0 列和第 1 列。第 0 列中的 AgentName 和第 1 列中的 AgentID。然后,我简单地获取了我的自定义变量并分配了从第 1 列读取,返回 true (read[1]) 后嵌套在 if (read.Read() == true) 中。我还确定将值分配给字符串以传递给我的字符串变量类,即使在这种情况下它是一个数字。

结果,我现在可以调用我的 AgentID 类,并在任何时间在我的应用程序中的任何位置检索使用 .Var 分配的值,而不管打开哪个表单。

2 竖起大拇指 :)

于 2012-11-20T02:13:36.690 回答