簡體   English   中英

在 C# 中將組合框字符串值轉換為 int 並在 SQL 服務器數據庫中傳遞值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM