从类型化数据集中获取标识值

本文关键字:获取 标识 集中 数据集 类型化 数据 | 更新日期: 2023-09-27 18:12:01

我在表单中得到了一个类型化的数据集。使用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;

从类型化数据集中获取标识值

根据文档,您必须使用TableAdapterRowUpdated方法

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()