我正在使用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表中記錄必須是員工表中添加用戶名之前,否則外鍵約束將紫
請您逐步通過代碼,並給我們提供此錯誤的確切位置? –
UserRole表中的用戶名外鍵? –
是的,用戶名是UserRole表中的外鍵。 –