繁体   English   中英

从SQL Server 2008表中检索ID到asp.net站点,然后将ID插入另一个表

[英]Retrieving ID from SQL Server 2008 table to asp.net site and then inserting the ID into another table

我有这个代码:

上传页面的.cs文件的一部分:

protected void Page_Load(object sender, EventArgs e)
{
        BtnImport1.Visible = false;
        Cancel.Visible = false;
}

private string ErrorMessage(string input)
{
     if (!string.IsNullOrEmpty(input))
        return input;

     BtnImport1.Visible = false; 
     return "No value entered!";
}

protected void btnUpload_Click(object sender, EventArgs e)
{
    string strFileNameOnServer = fileUpload.PostedFile.FileName;
    string fileExt =
        System.IO.Path.GetExtension(fileUpload.FileName);

    if (fileUpload.PostedFile != null && fileExt == ".csv")
    {
        try
        {
           fileUpload.PostedFile.SaveAs(Server.MapPath("~/uploads"));
           Label1.Text = "File name: " +
                          fileUpload.PostedFile.FileName + "<br>" +
                          fileUpload.PostedFile.ContentLength + " kb<br>" +
                          "Content type: " +
                          fileUpload.PostedFile.ContentType;
        }
        catch (Exception ex)
        {
           Label1.Text = "Error saving <b>" + strFileNameOnServer + "</b><br>.  " + ex.Message;
        }
        BtnImport1.Visible = true;
        Cancel.Visible = true;
        fileUpload.Visible = false;
        btnUpload.Visible = false;
     }
     else
     {
        Label1.Text = "Error - a file name must be specified/only csv files are allowed";
        return;
     }        
}

protected void BtnImport1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true");
    StreamReader Sr = new StreamReader(Server.MapPath("~/uploads"));
    string line;
    while ((line = Sr.ReadLine()) != null)
    {
        String[] tokens = line.Split(',');
        const string SQL = "INSERT INTO Attendance ([GuestID], [IC_No], [Grouping], [Remarks], [GuestName], [Class_Group], [Staff], [Attendance_Parents_Only], [Registration], [Event_ID] ) VALUES (@GuestID, @IC_No, @Grouping, @Remarks, @GuestName, @Class_Group, @Staff, @Attendance_Parents_Only, @Registration, @Event_ID)";
        SqlCommand cmd = new SqlCommand(SQL, con);
        cmd.Parameters.AddWithValue("@GuestID", tokens[0]);
        cmd.Parameters.AddWithValue("@IC_No", tokens[1]);
        cmd.Parameters.AddWithValue("@Grouping", tokens[2]);
        cmd.Parameters.AddWithValue("@Remarks", tokens[3]);
        cmd.Parameters.AddWithValue("@GuestName", tokens[4]);
        cmd.Parameters.AddWithValue("@Class_Group", tokens[5]);
        cmd.Parameters.AddWithValue("@Staff", tokens[6]);
        cmd.Parameters.AddWithValue("@Attendance_Parents_Only", tokens[7]);
        cmd.Parameters.AddWithValue("@Registration", tokens[8]);
        cmd.Parameters.AddWithValue("@EventID", tokens[9]);

        con.Open();
        cmd.ExecuteNonQuery();  
        con.Close();
     }
     Response.Redirect("Main.aspx");
  }

所以我想从SQL Server 2008表中获取名为EventEventID ,然后将其插入到另一个名为Attendance表中,如BtnImport1_Click 表中有EventIDEventName列,称为Event 我在另一个.cs页面中查询了ListBox中的EventName字符串。 查询字符串存储EventName

protected void up_Click(object sender, EventArgs e)
{
    foreach (ListItem li in ListBox1.Items)
    {
        //if the item is selected in the listboxs
        if (li.Selected)
        {
           Response.Redirect("Upload.aspx?ename=" + this.ListBox1.SelectedItem);
        }
    }

现在,我不知道如何搭配存储的EventNameEventID ,并插入EventIDEvent表中,与其他信息一起BtnImport1_Click

请帮忙,我已经开始了几天了= =

如果你有一个包含两列EventIDEventName的表Event ,并且你确实有EventName ,那么你可以使用像

SELECT EventID
FROM dbo.Event
WHERE EventName = @EventName

在你的代码中。 请注意:如果所有事件名称都是唯一的,这只能可靠地工作 - 如果您碰巧有两个相同名称的事件,则无法区分这两个事件.....

确实如此:您不应该使用/存储事件名称 - 当您在UI中工作时,您应该拥有EventID - ID是唯一能够唯一且清楚地标识事件的事物。

因此,您真正需要做的是更改应用程序,以便在用户在ASP.NET UI中进行选择时使用EventID 大多数情况下,您既可以指定用户的显示值(事件名称),也可以指定作为EventID的键值 当用户从下拉列表中选择一个事件时,用户会选择一个名称 - 但您将能够获取作为数据密钥的EventID

更新:为了将EventIDEventName放入列表框,您需要使用包含这两个值的类Event 从数据库中填充该类并将其绑定到列表框,使EventName成为DataTextField,将EventID作为DataValueField。 然后,将显示事件名称,但是当用户选择项目时,您可以访问整个项目 - 包括它的EventID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM