C# 如何从MS Access文本字段填充组合框,然后将组合框选择插入到另一个表中

C# 如何从MS Access文本字段填充组合框,然后将组合框选择插入到另一个表中,c#,winforms,combobox,ms-access-2010,C#,Winforms,Combobox,Ms Access 2010,我试图插入一个Access表记录,其中包含来自组合框的信息。我正在使用winform和C。我简化了我的项目,只包含了问题领域。我展示了三个带有4个控件的方法(2个按钮和2个组合框)。第一个方法是连接到Access数据库,然后在第一个组合框中显示表和视图的列表。此方法还将调用最后一个方法SelectName()并用所选数据库中预定表的字段内容填充第二个组合框是我的问题所在。单击“插入”按钮时,我希望该方法将combobox1中的选定表插入Combox2中的选定项。我可以插入选定表的唯一内容是

我试图插入一个Access表记录,其中包含来自组合框的信息。我正在使用winform和C。我简化了我的项目,只包含了问题领域。我展示了三个带有4个控件的方法(2个按钮和2个组合框)。第一个方法是连接到Access数据库,然后在第一个组合框中显示表和视图的列表。此方法还将调用最后一个方法SelectName()并用所选数据库中预定表的字段内容填充第二个组合框是我的问题所在。单击“插入”按钮时,我希望该方法将combobox1中的选定表插入Combox2中的选定项。我可以插入选定表的唯一内容是

                     System.Data.DataRowView   
下面是我项目的C#部分。任何建议都非常感谢。谢谢

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;

    namespace DbApp
    {
    public partial class Form1 : Form
    {
        private char ch = '"';
        private OleDbConnection dbConn;
        private string sql = "";


    public Form1()
    {
        InitializeComponent();
    }

    private void buttonConnect_Click(object sender, EventArgs e)
    {
        string connectionString = "";
        string stringData = "";

        openFileDialog1.Filter = "";
        openFileDialog1.ShowDialog();

        Text = openFileDialog1.FileName;
        stringData = openFileDialog1.FileName;

        connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ch + Text + ch;

        if (dbConn != null)
            dbConn.Close();

        dbConn = new OleDbConnection(connectionString);
        dbConn.Open();
        comboBox1.Items.Clear();
        DataTable info = dbConn.GetSchema("Tables");
        for (int x = 0; x < info.Rows.Count; ++x)
        {
            if ((info.Rows[x][3].ToString() == "TABLE") || (info.Rows[x][3].ToString() == "VIEW"))
            {
                comboBox1.Items.Add((object)info.Rows[x][2].ToString());
            }
        }

        SelectName();
    }

    private void buttonInsert_Click(object sender, EventArgs e)
    {
        string name = this.comboBox2.SelectedItem.ToString();

        try
        {
            dbConn = new OleDbConnection();
            dbConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + ch + openFileDialog1.FileName + ch;
            dbConn.Open();

            sql = "INSERT INTO " + this.comboBox1.SelectedItem.ToString() + " (Names)" +
            "Values (@name)";
            OleDbCommand myCommand = new OleDbCommand(sql, dbConn);

            myCommand.Parameters.Add("@name", OleDbType.VarChar).Value = name;
            myCommand.ExecuteNonQuery();

            myCommand.Connection.Close();
        }
        catch (Exception err)
        {
            MessageBox.Show("Error: " + err.Message.ToString());
        }
    }

    private void SelectName()
    {
        string strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + ch + openFileDialog1.FileName + ch;

        try
        {
            using (dbConn = new OleDbConnection(strCon))
            {
                dbConn.Open();
                sql = "SELECT Name FROM Names";
                OleDbDataAdapter adapter = new OleDbDataAdapter(new OleDbCommand(sql, dbConn));
                DataSet ds = new DataSet();
                adapter.Fill(ds, "Names");
                comboBox2.Items.Clear();
                this.comboBox2.DataSource = ds.Tables["Names"];
                this.comboBox2.DisplayMember = "Name";
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message.ToString());
        }
    }
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.Data.OleDb;
命名空间DbApp
{
公共部分类Form1:Form
{
私有字符ch=“”;
专用OLEDB连接dbConn;
私有字符串sql=“”;
公共表格1()
{
初始化组件();
}
私有无效按钮连接\单击(对象发送者,事件参数e)
{
字符串连接字符串=”;
字符串stringData=“”;
openFileDialog1.Filter=“”;
openFileDialog1.ShowDialog();
Text=openFileDialog1.FileName;
stringData=openFileDialog1.FileName;
connectionString=“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+ch+Text+ch;
if(dbConn!=null)
dbConn.Close();
dbConn=新的OLEDB连接(connectionString);
dbConn.Open();
comboBox1.Items.Clear();
DataTable info=dbConn.GetSchema(“表”);
对于(int x=0;x
试试这个:

string name = this.comboBox2.Text;

Combobox1正常工作。问题在于combox2,所选项目没有值,这就是为什么要将System.Data.DataRowView添加到表中的原因。您的Combox1是否将要插入的值显示为
name
?如果是这样,您应该可以通过
SelectedValue
Text轻松访问它de>属性
comboBox2
。不管怎样-您可以尝试上面编辑的解决方案。Text属性成功了。我的字符串声明变成了string name=this.comboBox2.Text.ToString();感谢您的帮助。