C#将数据插入Access数据库

C#将数据插入Access数据库,c#,C#,我是编程新手,在将表单中的数据插入数据库时遇到问题。如果单击该按钮,它将进入else语句,其中显示“连接失败” 这是我的密码: private void buttonAddrecord_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data

我是编程新手,在将表单中的数据插入数据库时遇到问题。如果单击该按钮,它将进入else语句,其中显示“连接失败”

这是我的密码:

private void buttonAddrecord_Click(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data Source=
     C:\Users\pc\Documents\Visual Studio 2015\Projects\GamefarmDB\GamefarmDB\Gamefarm.accdb;
        User ID = admin;");

    String WingbandNumber = wingbandnumberTextbox.Text;
    String DateOfHatch = dateofhatchTextbox.Text;
    String Markings = markingsTextbox.Text;
    String Bloodline = bloodlineTextbox.Text;
    String Broodhen = broodhenTextbox.Text;
    String Broodcock = broodcockTextbox.Text;

    OleDbCommand cmd = new OleDbCommand("INSERT into List (WingbandNumber, 
        DateOfHatch, Markings, Bloodline, Broodhen, Broodcock)  
        Values(@WingbandNumber, @DateOfHatch, @Markings, @Bloodline,  
        @Broodhen, @Broodcock)");

    cmd.Connection = conn;

    if (conn.State == ConnectionState.Open)
    {
        cmd.Parameters.Add("@WingbandNumber", OleDbType.Numeric).Value = WingbandNumber;
        cmd.Parameters.Add("@DateOfHatch", OleDbType.LongVarChar).Value = DateOfHatch;
        cmd.Parameters.Add("@Markings", OleDbType.LongVarChar).Value = Markings;
        cmd.Parameters.Add("@Bloodline", OleDbType.LongVarChar).Value = Bloodline;
        cmd.Parameters.Add("@Broodhen", OleDbType.LongVarChar).Value = Broodhen;
        cmd.Parameters.Add("@Broodcock", OleDbType.LongVarChar).Value = Broodcock;

        try
        {
            cmd.ExecuteNonQuery();
            MessageBox.Show("Data Added");
            conn.Close();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Source);
            conn.Close();
        }
    }
    else
    {
        MessageBox.Show("Connection Failed");
    }
 }

我同意你应该使用conn.Open();您还应该在if(conn.State==ConnectionState.Open)之前放置一个try-catch,这样您的代码应该如下所示

.
.
.
cmd.Connection = conn;
try
    {
       conn.Open();
        if (conn.State == ConnectionState.Open)
        {
              .
              .
              .
    else
            {
                MessageBox.Show("Connection Failed");
            }
    catch (Exception ex)
{
MessageBox.Show(ex.toString());
conn.Close();
}

因此,它将为您提供无法连接的确切异常,如果整个过程出现任何问题,它也将为您提供异常。

命令对象需要打开连接。因此,您应该在执行命令之前打开连接

您只需要在实际使用连接对象之前打开它 因此,您的代码将如下所示

private void buttonAddrecord_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection();
        conn.ConnectionString = (@"Provider= Microsoft.ACE.OLEDB.12.0;Data Source =C:\Users\pc\Documents\Visual Studio 2015\Projects\GamefarmDB\GamefarmDB\Gamefarm.accdb;User ID = admin;");
    String WingbandNumber = wingbandnumberTextbox.Text;
    String DateOfHatch = dateofhatchTextbox.Text;
    String Markings = markingsTextbox.Text;
    String Bloodline = bloodlineTextbox.Text;
    String Broodhen = broodhenTextbox.Text;
    String Broodcock = broodcockTextbox.Text;

    OleDbCommand cmd = new OleDbCommand("INSERT into List (WingbandNumber, DateOfHatch, Markings, Bloodline, Broodhen, Broodcock) Values(@WingbandNumber, @DateOfHatch, @Markings, @Bloodline, @Broodhen, @Broodcock)");

    cmd.Connection = conn;

    conn.Open(); // To Open Connection
    if (conn.State == ConnectionState.Open)
    {
        cmd.Parameters.Add("@WingbandNumber", OleDbType.Numeric).Value = WingbandNumber;
        cmd.Parameters.Add("@DateOfHatch", OleDbType.LongVarChar).Value = DateOfHatch;
        cmd.Parameters.Add("@Markings", OleDbType.LongVarChar).Value = Markings;
        cmd.Parameters.Add("@Bloodline", OleDbType.LongVarChar).Value = Bloodline;
        cmd.Parameters.Add("@Broodhen", OleDbType.LongVarChar).Value = Broodhen;
        cmd.Parameters.Add("@Broodcock", OleDbType.LongVarChar).Value = Broodcock;

        try
        {
            cmd.ExecuteNonQuery();
            MessageBox.Show("Data Added");
            conn.Close();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Source);
            conn.Close();
        }
    }
    else
    {
        MessageBox.Show("Connection Failed");
    }
}

我不确定我是否看到一个接头开着;将其添加到If子句之前,并检查是否需要打开连接才能使用它。在“if”条件之前添加“conn.Open()。
OleDbCommand
实现。我将使用(var con=new OleDbConnection(consting)){con.Open()使用
重新编译;/…
。即使在使用代码块中发生错误,使用程序也会确保连接正确处理/关闭。您好,非常感谢您的帮助,在连接字符串中,我刚刚添加了密码,在if语句之前,我添加了“conn.Open();”,并且成功了!