0

我在数据库中创建了 2 个表,每个表都有一个相互关联的 CompanyID 字段

在我的注册页面,公司必须注册以下信息:

  1. 公司编号
  2. 公司名
  3. 业务类型
  4. 联络人
  5. 电话
  6. 地址
  7. 电子邮件
  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. 您可以修改Store-Job以使用公司名称而不是公司 ID,并且在该过程中,通过公司名称查找公司 ID,然后使用它在 Jobs 表上执行插入。

  3. 由于您在登录时进行了某种形式的验证,这可能是检索公司 ID 并将其存储在会话中的好时机(正如上面 Gene S 建议的那样)。然后,您可以检索它并在存储过程中使用它。

由于您可能需要在应用程序的许多地方使用它,以确保保存或检索的数据属于正确的公司,因此选项 3 听起来是最好的。

于 2012-10-17T17:26:13.523 回答