私が作成した社内アプリケーションの設計、フレームワーク、およびほとんどのコードが完成しました。非表示のネットワーク ドライブにある Access データベースに保存されているデータにアクセス、表示、更新する 3 つの完全に異なる形式に変換される機能を追加しようとしています。
私が持っている質問の関連情報は次のとおりです... 1) ユーザーはアプリケーションを起動し、現在ログインしているユーザー名を収集して表示し、続行するかどうかを尋ねます。2) 続行することを選択すると、コードは MS Access データベース内のエージェント テーブルを検索して、エージェントの名前に対して作成されたレコードがあるかどうかを確認します。3) レコードが (現在) 存在する場合、フォームは閉じ、データ入力フォームに戻り、ユーザー名のみを表示する情報の入力を開始します。4) レコードが存在しない場合、別のフォームが開き、ユーザーが詳細を入力します。マネージャー、シフトの開始時刻と終了時刻、およびその AgentID 5) エージェントの詳細が保存されると、アプリケーションはデータ入力フォームに戻り、情報の入力を開始します。
このコードで達成したいこと... 手順 3) で、ユーザー名に一致するレコードが正常に見つかった後、一致する行の値を AgentID 列に返します。データベースには、AgentID を特定の役割に一致させるルックアップ フィールドがあります。これを後で使用して、ユーザーの役割に基づいて別の名前のフォームを表示します。今のところ、対応する行から AgentID を取得し、作成した静的クラス変数に値を保存して、他の既存のフォームで利用できるようにしたいと考えています。
参照用の using ステートメント
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;
}
}
}
}