C#如何连接到MS Access 2007

5 c#

我在连接到MS Access DB 2007时遇到问题.代码:

private void btnSave_Click(object sender, EventArgs e)
    {
        OleDbConnection Conn = new OleDbConnection();

        try
        {
            string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ Directory.GetCurrentDirectory() +"\\dvd_manager.accdb;Persist Security Info=False;";
            Conn.ConnectionString = conn;

            Conn.Open();

            int i = cbbLocatie.SelectedIndex + 65;
            char c = (char)i;

            string sql = "INSERT INTO DVD (titel, locatie)VALUES(@titel, @locatie)";
            OleDbCommand Com = new OleDbCommand();
            Com.CommandText = sql;
            Com.Connection = Conn;

            OleDbParameter Param = new OleDbParameter("@titel", txtTitle.Text);
            Com.Parameters.Add(Param);

            Param = new OleDbParameter("@locatie", c);
            Com.Parameters.Add(Param);

            Com.ExecuteNonQuery();
            Conn.Close();

            MessageBox.Show("Data is opgeslagen " + sql);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Fout opgetreden: " + ex.Message);
        }
        finally
        {
            Conn.Close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,消息框出现.这应该意味着我的数据被插入.但是当我打开accdb文件时,没有插入数据.我究竟做错了什么?

日Thnx

编辑:ExecuteNonQuery()的返回值是1(我编辑我的帖子,因为我无法添加任何评论,当我点击添加评论时,框没有显示..)

编辑2:我创建了一个具有Title和Location属性的类.代码:private void btnSave_Click(object sender,EventArgs e){OleDbConnection Conn = new OleDbConnection();

try
{
    string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ Directory.GetCurrentDirectory() +"\\dvd_manager.accdb;Persist Security Info=False;";
    Conn.ConnectionString = conn;

    // Create object
    Medium M = new Medium();
    int i = cbbLocatie.SelectedIndex + 65;
    char c = (char)i;

    M.Location = c;
    M.Title = txtTitle.Text;

    Conn.Open();

    string sql = "INSERT INTO DVD (titel, locatie)VALUES(@titel, @locatie)";
    OleDbCommand Com = new OleDbCommand();
    Com.CommandText = sql;
    Com.Connection = Conn;

    OleDbParameter Param1 = new OleDbParameter("@titel", M.Title);
    Com.Parameters.Add(Param1);

    OleDbParameter Param2 = new OleDbParameter("@locatie", M.Location);
    Com.Parameters.Add(Param2);

    int ret = Com.ExecuteNonQuery();
    Conn.Close();

    MessageBox.Show("Data is opgeslagen " + ret);
}
catch (OleDbException ex)
{
    MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
    MessageBox.Show("Fout opgetreden: " + ex.Message);
}
finally
{
    Conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

}

由于我仍然无法点击添加评论按钮,这里是我的新代码与无名sql参数:

// some code
Conn.Open();

string sql = "INSERT INTO DVD (titel, locatie)VALUES(?, ?)";
OleDbCommand Com = new OleDbCommand();
Com.CommandText = sql;
Com.Connection = Conn;

OleDbParameter Param1 = new OleDbParameter("@p1", OleDbType.VarChar, 1);
Param1.Value = M.Title;
Com.Parameters.Add(Param1);

OleDbParameter Param2 = new OleDbParameter("@p2", OleDbType.VarChar, 255);
Param2.Value = M.Location;
Com.Parameters.Add(Param2);

int ret = Com.ExecuteNonQuery();
Conn.Close();
// morde code
Run Code Online (Sandbox Code Playgroud)

Kha*_*aji 1

ExecuteNonQuery 将返回一个 int 值,指示受影响的行数。我要做的第一件事就是检查退货。ExecuteNonQuery 可以执行并且不影响任何行,这不会触发捕获。