0

データベースに2つのテーブルを作成しました。各テーブルには、相互に関連するCompanyIDフィールドがあります。

私の登録ページで、会社は次の情報を登録する必要があります。

  1. CompanyID
  2. 会社名
  3. 事業の種類
  4. 連絡窓口
  5. 電話
  6. 住所
  7. Eメール
  8. パスワード

次に、会社は会社名とパスワードを使用してログインします。ログインすると、会社はジョブを投稿できます。私が抱えている問題は、ジョブテーブルにあり、CompanyIDというフィールドもあります。

Companyテーブルに保存されている登録済みの会社からCompanyIDを取得して使用するにはどうすればよいですか?

        SqlParameter p6 = new SqlParameter("CompanyID", 'here' );

私の完全なコード:

    protected void Button1_Click(object sender, EventArgs e)
{
    string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VC_temps.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
    SqlConnection con = new SqlConnection(strcon);

    SqlCommand com = new SqlCommand("Store-Jobs", con);
    com.CommandType = CommandType.StoredProcedure;
    SqlParameter p1 = new SqlParameter("Job", TextBox1.Text);
    SqlParameter p2 = new SqlParameter("JobType", DropDownList1.Text);
    SqlParameter p3 = new SqlParameter("StartDate", TextBox3.Text);
    SqlParameter p4 = new SqlParameter("Time", TextBox2.Text);
    SqlParameter p5 = new SqlParameter("JobID", TextBox1.Text.Substring(3).ToUpper());
    SqlParameter p6 = new SqlParameter("CompanyID", );
    SqlParameter p7 = new SqlParameter("PositionFilled", "NO");
    SqlParameter p8 = new SqlParameter("Description", TextBox4.Text);
    com.Parameters.Add(p1);
    com.Parameters.Add(p2);
    com.Parameters.Add(p3);
    com.Parameters.Add(p4);
    com.Parameters.Add(p5);
    com.Parameters.Add(p6);
    com.Parameters.Add(p7);
    com.Parameters.Add(p8);
    con.Open();
    com.ExecuteNonQuery();
    Labelinfo.Text = "Post successful.";
}
4

2 に答える 2

2

これを行うにはいくつかの方法があります。ユーザーは特定の会社にログインしているので、CompanyIdはセッション全体で同じであると想定しています。したがって、ログインプロセス中にCompanyIdを取得し、それをSession変数に格納することをお勧めします。次に、いつでもこのセッション変数からCompanyIdを取得します。

別の方法は、会社名をストアドプロシージャに渡し、ストアドプロシージャが会社名の値を使用してCompanyIdを取得できるようにすることです。

二次的な注意点として....問題が発生する可能性のあるコードを見つけたときに、ベストプラクティスを示したいと思います。すべてが成功した場合、コードは正常に機能しますが、例外が発生した場合は、SQL接続を開いたままにします。私はあなたのコードをリファクタリングして代替案を示すために自由を取りました...

string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\VC_temps.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"; 

// Use "using" statement to guarantee connection is closed even if exception occurs
using (SqlConnection con = new SqlConnection(strcon))
{
    con.Open(); 
    using (SqlCommand com = con.CreateCommand("Store-Jobs"))
    {
        com.CommandType = CommandType.StoredProcedure; 
        com.Parameters.AddWithValue("Job", TextBox1.Text); 
        com.Parameters.AddWithValue("JobType", DropDownList1.Text); 
        com.Parameters.AddWithValue("StartDate", TextBox3.Text); 
        com.Parameters.AddWithValue("Time", TextBox2.Text); 
        com.Parameters.AddWithValue("JobID", TextBox1.Text.Substring(3).ToUpper()); 
        com.Parameters.AddWithValue("CompanyID", ); 
        com.Parameters.AddWithValue("PositionFilled", "NO"); 
        com.Parameters.AddWithValue("Description", TextBox4.Text); 
        com.ExecuteNonQuery(); 
    }
}
Labelinfo.Text = "Post successful."; 
于 2012-10-17T17:21:16.680 に答える
0

いくつかのオプションがあります。

  1. 会社名を使用して、別のストアド プロシージャを使用して Company テーブルから会社 ID を取得しStore-Job、コードで行うようにプロシージャを呼び出すことができます。

  2. 会社 ID ではなく会社名を取得するように変更Store-Jobし、その手順内で、会社名で会社 ID を検索し、それを使用して Jobs テーブルで挿入を実行できます。

  3. ログイン時に何らかの形式の検証が行われているため、会社 ID を取得してセッションに保存するのに適した時期かもしれません (Gene S が上記で提案したように)。その後、それを取得して、ストアド プロシージャで使用できます。

おそらくアプリの多くの場所で使用する必要があるため、保存または取得するデータが適切な会社に属していることを確認するには、オプション 3 が最適に思えます。

于 2012-10-17T17:26:13.523 に答える