[英]Convert combobox string value to int in C# AND pass value in SQL server DB
我希望我能清楚地解釋我在編程方面的困境。 我在編程方面相當新,所以請耐心等待。 我正在使用 C# 和 SQL Server 2014。
我在 SQL 服務器中創建了一個數據庫,其中包含名為 Roles 和 AccountRegistration 的表:
角色表有 RoleId(pk) 和 RoleName,而 AccountRegistration 表有用戶名(pk)、密碼、RoleId(fk)、全名、地址。
兩個表都通過 RoleID 關聯
現在,我創建了一個包含用戶名、密碼、全名、地址和角色名稱的帳戶注冊表 (C#)。
RoleName 在組合框中,如果用戶選擇 Admin 或 Employee,如何將其轉換為 int 以便將其傳遞給 RoleId 字段?
這是我嘗試過的(僅使用 SQL 服務器),但它不起作用。
INSERT INTO AccountRegistration(RoleID)
SELECT a.RoleName
FROM Roles a
INNER JOIN AccountRegistration b ON cast(a.RoleId as nvarchar(255))=b.RoleID
錯誤消息:
消息 245,級別 16,狀態 1,第 1 行
將 nvarchar 值“Admin”轉換為數據類型 int 時轉換失敗。
我還沒有嘗試在 C# 中編寫代碼,因為我仍在嘗試找出邏輯。
SqlConnection con = new SqlConnection(@"Data Source=***\sqlexpress;Initial Catalog=****;User ID=**;Password=****");
public FrmAddNewAccount()
{
InitializeComponent();
}
private void FrmAddNewAccount_Load(object sender, EventArgs e)
{
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("Select * From Roles", con);
DataSet dataSet = new DataSet();
sqlDataAdapter.Fill(dataSet);
cmbRole.DisplayMember = "RoleName";
cmbRole.ValueMember = "RoleId";
cmbRole.DataSource = dataSet;
}
private void btnSave_Click(object sender, EventArgs e)
{
con.Open();
SqlDataAdapter sda = new SqlDataAdapter("Insert into AccountRegistration(Username, Password, RoleID, FullName, Address) VALUES ('" + txtUsername.Text + "', '" + txtPassword.Text + "', '" + cmbRole.Text + "', '" + txtFullName.Text +"', '"+txtAddress.Text+"')", con);
sda.SelectCommand.ExecuteNonQuery();
con.Close();
}
private void cmbRole_SelectedValueChanged(object sender, EventArgs e)
{
string RoleId = cmbRole.SelectedValue.ToString();
}
您必須將 RoleId 和 RoleName 綁定到組合框。
SqlConnection sqlConnection=new SqlConnection("Your Sql Server Connection");
SqlDataAdapter sqlDataAdapter=new SqlDataAdapter("Select * From Roles",sqlConnection);
DataSet dataSet = new DataSet();
sqlDataAdapter.Fill(dataSet);
comboBoxRoles.DisplayMember = "RoleName";
comboBoxRoles.ValueMember = "RoleId";
comboBoxRoles.DataSource = dataSet;
當在 ComboBox 中選擇了項目時,您必須將 selectedValue 作為 RoleId 發送到 t-sql 以插入表
private void comboBoxRoles_SelectedValueChanged(object sender, EventArgs e)
{
string RoldId = comboBoxRoles.SelectedValue.ToString();
//RoleId = 35 for example
}
這確實是一個 SQL 問題。 它不起作用的原因是因為“管理員”不是數字。 你需要在 C# 中做的事情是這樣的(我會讓你編碼從 SQL Server 的實際讀取):
string[] positionTypes = new String { "admin", "manager", "peon" }; //fill the array with your positions.
public static int ConvertFromPosition(string pos)
{
return positionTypes.IndexOf(pos.ToLower().Trim());
}
這只是對您提供給我們的信息的快速而骯臟的處理。 如果您需要不等於這些 indeces 的特定數值,您將需要一個enum
來容納這些值和一個switch
語句來運行比較。
public enum MyEnum
{
Admin = 10,
Manager = 20,
Peon = 30
}
public static int ConvertFromPosition(string pos)
{
switch(pos.ToLower().Trim())
{
case "admin": return MyEnum.Admin; break;
case "manager": return MyEnum.Manager; break;
case "peon": return MyEnum.Peon; break;
default:
Throw new ApplicationException("Position " + pos + " is not a valid position.");
}
}
請注意,有更安全的方法來比較字符串,就像我說的那樣,這只是快速而骯臟的方法。 如果我們是特定於文化的,情況就會變得更加復雜。
你的插入查詢應該有
“cmbRole.SelectedValue.ToString()”而不是“cmbRole.Text”。
SqlDataAdapter sda = new SqlDataAdapter("Insert into AccountRegistration(
Username, Password, RoleID, FullName, Address) VALUES
('" + txtUsername.Text + "', '" + txtPassword.Text + "', '" +
cmbRole.SelectedValue.ToString() + "', '" + txtFullName.Text +"',
'"+txtAddress.Text+"')", con);
這應該可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.