2011-08-31 50 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

相關問題