从Typed DataSet获取标识值

时间:2011-10-23 10:41:18

标签: c# ms-access dataset typed-dataset

我的表单中有一个类型化的数据集。使用BindingSource遍历行,插入和更新记录。

一切都很好,但我需要插入记录标识值,以便为我表格中的GeneratedCode字段生成字符串。

获取此值后,我会向我的CodeGen()方法发送值并生成字符串,并使用此值更新同一行的CodeGen字段。

我正在使用Access数据库。我知道Access有@@Identity的东西,但是如何使用呢?我不想使用OleDbCommand或类似的东西。

我该怎么做?

  string GenCode(int pCariId)
    {
        string myvalue;
        int totalDigit = 7;

        myvalue = "CR" + pCariId.ToString();
        for (int digit = myvalue.Length; digit <= totalDigit - 1; digit++)
        {
            myvalue = myvalue.Insert(2, "0");

        }
        return myvalue;
    }

private void dataNavigator_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
    {
         switch (e.Button.ButtonType)
        {
            case NavigatorButtonType.EndEdit:
                try
                {

                    this.Validate();

                    if (KaydetFlags == 1)
                    {
                        this.bndCariKayit.EndEdit();

                        datagate_muhasebeDataSet.TB_CARI.Rows[datagate_muhasebeDataSet.Tables["TB_CARI"].Rows.Count - 1]["INS_USR"] = 0;
                        datagate_muhasebeDataSet.TB_CARI.Rows[datagate_muhasebeDataSet.Tables["TB_CARI"].Rows.Count - 1]["INS_TRH"] = DateTime.Now;
                        XtraMessageBox.Show("Yeni Cari Kaydı Tamamlandı.");
                        KaydetFlags = 0;

                    }
                    else
                    {

                        DataRowView currentRow = (DataRowView)bndCariKayit.Current;
                        currentRow.Row["UPD_USR"] = "0";
                        currentRow.Row["UPD_TRH"] = DateTime.Now;
                        XtraMessageBox.Show("Cari Kaydı Güncellendi.");
                        this.bndCariKayit.EndEdit();
                    }
                    this.tB_CARITableAdapter.Update(datagate_muhasebeDataSet.TB_CARI);


                }
                catch (System.Exception ex)
                {
                    XtraMessageBox.Show("Kayıt İşlemi Başarısız. Lütfen Tekrar Deneyiniz.");
                }
                break;

1 个答案:

答案 0 :(得分:0)

根据documentation,您必须使用RowUpdated

TableAdapter方法
private static void OnRowUpdated(
  object sender, OleDbRowUpdatedEventArgs e)
{
    // Conditionally execute this code block on inserts only.
    if (e.StatementType == StatementType.Insert)
    {
        OleDbCommand cmdNewID = new OleDbCommand("SELECT @@IDENTITY",
            connection);
        // Retrieve the Autonumber and store it in the CategoryID column.
        e.Row["CategoryID"] = (int)cmdNewID.ExecuteScalar();
        e.Status = UpdateStatus.SkipCurrentRow;
    }
}

我实际使用的另一个选项是创建Select查询,该查询只会从您id列中获取最大价值:

SelectLastAddedId:
SELECT MAX(id) FROM obmiar

只需将查询执行模式设置为scalar,您就可以在代码中将其引用为 int lastId = TableAdapter.SelectLastAddedId()