<>OleDb操作Access数据库:新增记录时获取自动编号的主键值

//打开数据库的一般方法

OleDbConnection cnn = new OleDbConnection(sCnn);

cnn.Open();

DataTable table = new DataTable();

try

{

    OleDbCommand cmd = new OleDbCommand(sCommand, cnn);

    cmd.CommandType = cmdType;

    //构建DataAdapter

    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);

    //填充数据

    table = new DataTable(sDataTableName);

    adapter.Fill(table);

    cnn.Close();

    table.PrimaryKey = new DataColumn[1] { table.Columns[0] };

    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);

    builder.QuotePrefix = "[";

    builder.QuoteSuffix = "]";

    adapter.InsertCommand = builder.GetInsertCommand();

    adapter.DeleteCommand = builder.GetDeleteCommand();

    adapter.UpdateCommand = builder.GetUpdateCommand();

    adapter.RowUpdated += new OleDbRowUpdatedEventHandler(OnRowUpdated);

}

catch

{

}

 

 

//========================

//OleDbRowUpdatedEventHandler实例

protected void OnRowUpdated(object sender, OleDbRowUpdatedEventArgs e)

{

    if ((e.Status == UpdateStatus.Continue) && e.StatementType == StatementType.Insert)

    {

        int newID = 0;

        OleDbCommand cmdGetId = new OleDbCommand("SELECT @@IDENTITY", e.Command.Connection);

        newID = (int)cmdGetId.ExecuteScalar();

        e.Row["id"] = newID;

        if (newID == 0)

        {

            MessageBox.Show("获取ID值错误!");

        }

    }

}

 

//========================

//修改row的数据

    System.Data.DataTable tblChange = table.GetChanges();

    affectRowCount = adapter.Update(tblChange);

    if (mode == modeNew)

    {

        row["id"] = tblChange.Rows[0]["id"];

    }

    table.AcceptChanges();

  

你可能感兴趣的:(Access)