C# 如何在组合框C中获取所选项目的id

C# 如何在组合框C中获取所选项目的id,c#,sql-server,forms,winforms,C#,Sql Server,Forms,Winforms,我正在WinForms项目中使用ComboBox。 我从组合框中显示的SQL server表值中获取属性库。 我需要获取selectedItem的另一个属性OID,并将其从第一个表单FormMaster传递到另一个表单FormImport 不公开; SqlCommand cmd=new-SqlCommandSELECT[ID]FROM[AffecAnalytique].[dbo].[DESCRIPTIF],其中[LIBELLE]='+comboBox3.Text+',con; SqlDataRe

我正在WinForms项目中使用ComboBox。 我从组合框中显示的SQL server表值中获取属性库。 我需要获取selectedItem的另一个属性OID,并将其从第一个表单FormMaster传递到另一个表单FormImport

不公开; SqlCommand cmd=new-SqlCommandSELECT[ID]FROM[AffecAnalytique].[dbo].[DESCRIPTIF],其中[LIBELLE]='+comboBox3.Text+',con; SqlDataReader rdr=cmd.ExecuteReader; 如果黑斯罗 { 尝试 { 字符串stroid=rdr[OID].ToString; textBox1.Text=rdr[OID].ToString; MessageBox.ShowstrOIDe; } 捕获异常ex{} MessageBox.showtesssst; } else MessageBox.Show11111; con.关闭;
您不会使用那样的SQL,而是使用参数,参数值将是comboBox3.SelectedItem转换为实际类型。类型可能是字符串,也可能是显示文本为该对象属性的对象

var selectedValue = comboBox3.SelectedItem as string; // whatever the item type is
if (selectedValue != null)
{
   cmd.Parameters.Add("@libelle", SqlDbType.VarChar).Value = selectedValue;
   // your code ... 
}
以下是使用SQL server northwind示例数据库的简化完整示例:

void Main()
{
    DataContext db = new DataContext(@"server=.\SQLexpress2012;trusted_connection=yes;database=Northwind");
    
    Table<Category> Categories = db.GetTable<Category>();
    Table<Product> Products = db.GetTable<Product>();
   
    Form f = new Form { Text="ComboBox ornek", Height=200, Width=500 };
    ComboBox cb1 = new ComboBox{ Left=10, Top=10, Width=450, Font=new Font("Courier New",8) };
    ComboBox cb2 = new ComboBox{ Left=10, Top=60, Width=450, Font=new Font("Courier New",8) };
    
    f.Controls.AddRange( new Control[] {cb1, cb2} );

    cb1.DataSource = Categories.ToList();
    cb1.ValueMember = "CategoryId";
    cb1.DisplayMember = "CategoryName";
    cb1.SelectedIndex = -1;

    cb1.SelectedIndexChanged += (sender, args) => { 
    
    var selectedCategory = ((ComboBox)sender).SelectedItem as Category;
    cb2.DataSource = null;
    cb2.Items.Clear();
    if (selectedCategory != null)
    {
      cb2.DataSource = Products.Where (p => p.CategoryId == selectedCategory.CategoryId).ToList();
      cb2.DisplayMember = "ProductName";
      cb2.ValueMember = "ProductId";
    }
    };
    
    f.Show();
}


[Table(Name = "Categories")]
public class Category
{
    [Column]
    public int CategoryId { get; set; }
    [Column]
    public string CategoryName { get; set; }
    [Column]
    public string Description { get; set; }
}

[Table(Name = "Products")]
public class Product
{
    [Column]
    public int ProductId { get; set; }
    [Column]
    public string ProductName { get; set; }
    [Column]
    public int CategoryId { get; set; }
}

警告:SQL极易受到注入攻击。你必须解决这个问题,重新开始。编写直接引用特定硬编码数据库的tsql通常是一个巨大的问题。这种做法将防止在同一实例中使用多个环境,并防止使用不同名称的数据库,例如一个用于clientx,一个用于clienty。您的连接应该确定该数据库存在的位置。