2011-08-31 52 views
0

我有这样的代码:用于上传页面cs文件的检索ID 2008表asp.net网站,然后插入ID到另一个表

部分:

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匹配,并与其他信息在BtnImport1_Click还插入EventIDEvent表一起。

请帮帮忙,我已经破解我的头,因为几天已经=/

+0

只需注意:您使用的数据库称为** SQL Server 2008 ** - “管理”这个东西叫做SQL Server Management Studio - 但这不是**数据库产品本身 - 它是一个与数据库一起工作的GUI前端。所以它是一个** SQL Server **表 - 不是一个SQL Server管理表 - 你在这里处理...... –

回答

2

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

SELECT EventID 
FROM dbo.Event 
WHERE EventName = @EventName 

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

所以确实:您不应该使用/存储事件名称 - 当您在用户界面中工作时,您应该准备好EventID - ID是唯一明确标识事件的唯一方法。

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

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

+0

所以,我应该如何改变它,以便在列表视图中显示值,而键值是EventID?对于我的无知,我很抱歉,我不能让它工作,或者你想看看我为.cs页面所做的所有代码? – user917145

+0

@ user917145:更新了我的回复 –

+0

你能告诉我一个如何创建这个类的例子吗?因为我不太了解技术细节。比方说,我有一个名为Event和列EventName,EventID的表。在那个类中,我应该输入什么来填充数据库中的类并将其绑定到列表框? – user917145

相关问题