【问题标题】:Get Identity Value from Typed DataSet从类型化数据集中获取标识值
【发布时间】:2011-12-13 12:26:27
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    根据documentation您必须使用RowUpdated 987654323 @

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多