C# 我正在尝试根据选择在Access DB中插入数据

C# 我正在尝试根据选择在Access DB中插入数据,c#,C#,请参阅附件,我写的代码,但当它运行时,当我在表单n中输入数据时,单击“提交”,在“Command.executenonquery statement”中会出现错误 它显示处理错误的无效操作异常 namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent();

请参阅附件,我写的代码,但当它运行时,当我在表单n中输入数据时,单击“提交”,在
“Command.executenonquery statement”
中会出现错误

它显示
处理错误的无效操作异常

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\databses\electric_data.accdb";
                OleDbCommand command = new OleDbCommand();
                command.CommandText = "INSERT INTO Electric_Data (Asset_Id,Asset_Name,Emp_Id,Type_of_Asset,Actual_Start_date) VALUES (?,?,?,?,?)";
                command.Parameters.Add("@Asset_Id", OleDbType.VarChar, 20).Value = textBox1.Text;
                command.Parameters.Add("@Asset_Name", OleDbType.Char, 20).Value = textBox2.Text;
                command.Parameters.Add("@Type_of_Asset", OleDbType.VarChar, 20).Value = textBox3.Text;
                command.Parameters.Add("@Emp_Id", OleDbType.Char, 20).Value = textBox4.Text;
                command.Parameters.Add("@Actual_Start_date", OleDbType.Date).Value = DateTime.Now;
                command.ExecuteNonQuery();
                conn.Open();
                command.Connection = conn;

                MessageBox.Show("Entry Registered Successfully.");
            }
            if (radioButton2.Checked == true)
            {
                OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\databses\electric_data.accdb";
                OleDbCommand command = new OleDbCommand();
                command.CommandText = "INSERT INTO Electric_Data (Asset_Id,Asset_Name,Emp_Id,Type_of_Asset,Actual_end_date) VALUES (?,?,?,?,?)";
                command.Parameters.Add("@Asset_Id", OleDbType.VarChar, 20).Value = textBox1.Text;
                command.Parameters.Add("@Asset_Name", OleDbType.Char, 20).Value = textBox2.Text;
                command.Parameters.Add("@Emp_Id", OleDbType.VarChar, 20).Value = textBox3.Text;
                command.Parameters.Add("@Type_of_Asset", OleDbType.VarChar, 20).Value = textBox4.Text;
                command.Parameters.Add("@Actual_end_date", OleDbType.Date).Value = DateTime.Now;
                command.ExecuteNonQuery();
                conn.Open();
                command.Connection = conn;

                MessageBox.Show("Entry Registered Successfully.");
            }

            else if (radioButton1.Checked == false && radioButton2.Checked == false)
                MessageBox.Show("Check Work_Start or Work_Complete option for successful Entry.");
        }


    }
}

你把conn.Open()放错地方了。试试-->

旁白:

  • 您不需要在代码中重复conn字符串、列名等。使维护和调试成为一场噩梦

  • 您需要添加try…catch异常处理-如果数据库因某种原因无法打开该怎么办


  • 编辑:command.CommandText根据其他学者的回答也错误。

    您的命令文本完全错误。用参数名称更改问号:

     command.CommandText = "INSERT INTO Electric_Data (Asset_Id,Asset_Name,Emp_Id,Type_of_Asset,Actual_Start_date) VALUES (@Asset_Id,@Asset_Name,@Emp_Id,@Type_of_Asset,@Actual_end_date)";
    
    在ExecuteOnQuery之后,您将打开连接,首先打开连接,然后执行查询

    conn.Open();
    command.Connection = conn;    
    command.ExecuteNonQuery();
    

    尝试此插入查询。删除
    ?,?,,?,?

     command.CommandText = "INSERT INTO Electric_Data (Asset_Id,Asset_Name,Emp_Id,Type_of_Asset,Actual_Start_date) VALUES (@Asset_Id,@Asset_Name,@Emp_Id,@Type_of_Asset,@Actual_end_date)";
    

    检查表列的数据类型

    值(?、、?、?、?)您故意将参数名称更改为“?”?yesw,以便可以使用多个数据进行输入,但您不能这样做。无论您添加什么,它都应该具有参数名。在执行查询之前还要打开连接。我尝试了仍然相同的错误“{”ExecuteOnQuery:connection属性尚未初始化。“}”它给出了一个新的错误“{”条件表达式中的数据类型不匹配。“资产Id、资产名称、Emp Id、资产类型都是varchar(20)/实际的资产结束日期是数据库中的日期吗?”?
     command.CommandText = "INSERT INTO Electric_Data (Asset_Id,Asset_Name,Emp_Id,Type_of_Asset,Actual_Start_date) VALUES (@Asset_Id,@Asset_Name,@Emp_Id,@Type_of_Asset,@Actual_end_date)";