2011-12-07 15 views
1

我正在使用ASP.NET嚮導控件在顯示其信息後編輯用戶角色。嚮導包括三個步驟:如何解決插入方法中插入不在數據庫中的用戶的這個錯誤?

大家好,

  • 第一步:包含一個文本框,其中管理員會把用戶的用戶名
  • 第二步:它會顯示該用戶的信息
  • 第三步:這是編輯用戶

因爲我開發公司內部網的Web應用程序的作用,管理員並不需要知道,如果用戶在數據庫上或沒有。所以我希望系統自動在後臺檢查用戶是否在數據庫中。如果他在數據庫中,角色將立即編輯。如果他不在數據庫中,他的信息將被添加到系統中並賦予他一個角色。

protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
     //If one of the items is selected AND a username exists in the Username session object update the user role 
     string username = TextBox1.Text; 

     if (!String.IsNullOrEmpty(radio1.SelectedValue) && !String.IsNullOrEmpty(username)) 
     { 
      string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdb;Integrated Security=True"; 

      string insertUserCommand = "INSERT INTO employee (Name, Username, JobTitle, BadgeNo, EmpOrgType, DivisionCode) values (@Name, @Username, @JobTitle, @BadgeNo, @EmpOrgType, @DivisionCode)"; 
      string cmdText = "SELECT Count(*) FROM employee WHERE Username = '" + username + "'"; 

      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       conn.Open(); 
       // Open DB connection. 
       using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
       { 
        if ((int)cmd.ExecuteScalar() == 0){ 
         //An object from ObjectUser class to get the user information from the secure system and insert them to the database 
         ObjectUser user = new ObjectUser(username,true); 

         SqlCommand cmd2 = new SqlCommand(insertUserCommand, conn); 
         cmd2.Parameters.AddWithValue("@Name", user.Name); 
         cmd2.Parameters.AddWithValue("@Username", username); 
         cmd2.Parameters.AddWithValue("@JobTitle", user.GetProperty("EMP_TITLE")); 
         cmd2.Parameters.AddWithValue("@BadgeNo", user.GetProperty("EMP_BADGE_NUMBER")); 
         cmd2.Parameters.AddWithValue("@EmpOrgType", user.GetProperty("EMP_EMPTYPE")); 
         cmd2.Parameters.AddWithValue("@DivisionCode", user.Org.Division.SapCode); 
        } 

       } 
      } 

      string deleteCommand = "DELETE FROM UserRole where [email protected]"; 
      string insertCommand = "INSERT INTO UserRole (RoleID,Username) values(@RoleID,@Username)"; 
      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       conn.Open(); 
       //using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
       using (SqlCommand cmd = new SqlCommand(deleteCommand, conn)) 
       { 
        cmd.Parameters.AddWithValue("@Username", username); 
        cmd.ExecuteNonQuery(); 
        //Now the insert 
        cmd.CommandText = insertCommand; 
        cmd.Parameters.Clear(); //need this because still has params from del comm 
        cmd.Parameters.AddWithValue("@RoleID", radio1.SelectedValue); 
        cmd.Parameters.AddWithValue("@Username", username); 
        cmd.ExecuteNonQuery(); 
        //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue); 
        //cmd.ExecuteScalar(); 
        //infoSpan.InnerText = String.Format("The users role has been updated to - {0}", radio1.SelectedValue); 
       } 
      } 

      Wizard1.Visible = false; 
      wizard.InnerHtml = @"The task has been done successfully. <br /> <a href='UserManagement.aspx'>Edit Another User</a>"; 
     } 


    } 

現在對於誰是不是在數據庫中,當我選擇了一個角色給他,並單擊Finish按鈕,它應該被添加到數據庫,但在我的情況我的底部得到一個錯誤的用戶瀏覽器它說(頁上的錯誤),當我點擊它,我得到了以下信息:

Sys.WebForms.PageRequestMangerServerErrorException:INSERT語句衝突與外鍵約束 「FK_UserRole_employee」。該數據庫發生在數據庫「psspdb」 表「dbo.employee」列'用戶名'中。該聲明已被終止 。

我不怎麼解決它。請幫忙嗎?

僅供參考,數據庫的設計是這樣的:

職員表

Username, Name, JobTitle... 

的UserRole表:

UserRoleID, Useranme, RoleID 

角色表:

RoleID, RoleName 

第一個屬性是每個表的主鍵。

順便說一句,正如你在我上面的問題中看到的,我使用了一個名爲insertUserCommand的東西。該命令應該足以將用戶信息添加到數據庫。所以我不應該有這個衝突。很抱歉問了很多,但我是這方面的初學者。你能告訴我我該怎麼處理代碼嗎?你的UserRole表中記錄必須是員工表中添加用戶名之前,否則外鍵約束將紫

+0

請您逐步通過代碼,並給我們提供此錯誤的確切位置? –

+0

UserRole表中的用戶名外鍵? –

+0

是的,用戶名是UserRole表中的外鍵。 –

回答

1
You are not executing insertUserCommand.After adding parameter that means after 
cmd2.Parameters.AddWithValue("@DivisionCode", user.Org.Division.SapCode); 
write cmd2.ExecuteNonQuery(). 
As you are not executing it this entry will not add to table 
+0

得到了你的答案? –

+0

感謝您的幫助。其實,我無法解決這個問題,但是你讓我在邏輯上弄錯了一些問題。所以讓我告訴你,可能你可以幫助我。問題如下:我有一個名爲Divisions表的表,它由DivisionCode和DivisionName組成,所以如果用戶不在數據庫中並且他不屬於我們的部門,當然他的分區代碼會出現錯誤不在Divisions表中。 –

+0

所以現在我需要創建一個名爲isMemberofDept()的方法來檢查他是否屬於我們的部門。你能幫我用方法嗎? –

1

因爲你要添加的UserRole的表,它不存在於員工的用戶名錯誤table.Make肯定。

+0

正如你在上面的問題中看到的,我使用了一個名爲insertUserCommand的東西。該命令應該足以將用戶信息添加到數據庫。所以我不應該有這個衝突。很抱歉問了很多,但我是這方面的初學者。你能告訴我我該怎麼處理代碼嗎? –

+0

您是否看到過使用調試器逐行執行代碼?請在insertUserCommand檢查用戶名是否存在之後檢查您的員工表。 –

+0

此方法之前我有這樣的東西:string username = TextBox1.Text;如上所述,該命令將用戶名放在嚮導的第一步。此外,包含以下代碼的行:cmd2.Parameters.AddWithValue(@Username,username);應該足以將用戶名插入到數據庫中。我仔細地調試了整個代碼,但我不知道如何解決這個錯誤。 –