sulomila Ответов: 2

Как получить последний введенный идентификатор?


Я сделал процедуру хранения, чтобы получить последний введенный идентификатор. Это работает. Но в кодировке c# он отображает нулевое значение. Я хочу получить последнее введенное удостоверение личности. Пожалуйста помочь.

Что я уже пробовал:

CREATE PROCEDURE spDonor (
@flag char(1), @donorcode varchar(2), @donor varchar(25),  @lastid int out
) WITH ENCRYPTION AS
SET NOCOUNT OFF
BEGIN 
	IF @flag = 'I' BEGIN
		INSERT INTO tblDonor (DonorCode, Donor) VALUES (@donorcode, UPPER(@donor))
		SELECT @lastid = SCOPE_IDENTITY()
 	END
	IF @flag = 'U' BEGIN
		UPDATE tblDonor
		SET DonorCode = @donorcode, Donor = UPPER(@donor) WHERE SeqNo = @lastid 	END
	IF @flag = 'D' BEGIN
		DELETE tblDonor WHERE SeqNo = @lastid 	END
	IF @flag = 'A' BEGIN
		SELECT SeqNo, DonorCode, Donor FROM tblDonor 	END
	IF @flag = 'S' BEGIN
		SELECT SeqNo, DonorCode, Donor FROM tblDonor WHERE SeqNo = @lastid 	END
	IF @flag = 'N' BEGIN
	SELECT SeqNo, DonorCode, Donor FROM tblDonor WHERE (UPPER(Donor) Like '%'+UPPER(@donor)+'%') 	END
END
SET NOCOUNT ON
RETURN
GO

/// 
private string _flag = string.Empty;
        public string Flag
        {
            get { return _flag; }
            set { _flag = value; }
        }

        private string _dnrCode = string.Empty;
        public string DnrCode
        {
            get { return _dnrCode; }
            set { _dnrCode = value; }
        }

        private string _donor = string.Empty;
        public string Donor
        {
            get { return _donor; }
            set { _donor = value; }
        }
        
        private int _lastid = 0;
        public int Lastid
        {
            get { return _lastid; }
            set { _lastid = value; }
        }


public int executeDonor()
        {
            SqlParameter[] param = new SqlParameter[]
            {
                new SqlParameter("@flag", _flag)
                , new SqlParameter("@donorcode", _dnrCode)
                , new SqlParameter("@donor", _donor)
                , new SqlParameter("@lastid", _lastid)
            };
            return DAO.ExecuteProc("spDonor", param);            
       }

private void btnSave_Click(object sender, EventArgs e)
{
mtacsys.Flag = "N";
mtacsys.Donor = txtDonor.Text.Trim();
DataTable dtchk = mtacsys.GetDonorByCodeName();
if (dtchk.Rows.Count > 0)
{
toolStripMessage.Text = mtacsys.Donor + " : This is already entered.";
}
else
{
mtacsys.Flag = "I";
mtacsys.DnrCode = txtDonorId.Text.Trim();
mtacsys.Donor = txtDonor.Text.Trim();

int i = mtacsys.executeDonor();
if (i > 0)
{
toolStripMessage.Text = "Record Saved Successfully";
ResetTextBox();
MessageBox.Show(mtacsys.Lastid + " : is entered");
}
}

2 Ответов

Рейтинг:
2

OriginalGriff

Вы уже знаете последний идентификатор - вы сохранили его в нем @LASTID когда вы сделали вставку:

INSERT INTO tblDonor (DonorCode, Donor) VALUES (@donorcode, UPPER(@donor))
SELECT @lastid = SCOPE_IDENTITY()

Просто верни это.


sulomila

Да, но мне нужна помощь в коде c#. когда я сохраняю запись, я хочу знать ее идентификатор. Пожалуйста.

OriginalGriff

И она у тебя есть!
Просто eiter SELECT @LASTID или извлекает его из параметров, учитывая, что это параметр OUT для SP.

Рейтинг:
0

Karthik_Mahalingam

проверить это sql server - использование выходных параметров хранимых процедур в C# - переполнение стека[^]
для чтения значения из параметра в C#, вы будете иметь, чтобы изменить ExecuteProc метод.

обратитесь к этому образцу кода:

public int executeDonor()
      {
          int lastID = 0;
          SqlConnection con = new SqlConnection("Your Conn string");
          SqlCommand cmd = new SqlCommand("spDonor ", con);
          cmd.CommandType = System.Data.CommandType.StoredProcedure;
          cmd.Parameters.Add(new SqlParameter("@flag", _flag));
          cmd.Parameters.Add(new SqlParameter("@donorcode", _dnrCode));
          cmd.Parameters.Add(new SqlParameter("@donor", _donor));
          SqlParameter paramOutId = new SqlParameter("@lastid", System.Data.SqlDbType.Int);
          cmd.Parameters.Add(paramOutId);
          paramOutId.Direction = System.Data.ParameterDirection.Output;
          con.Open();
          cmd.ExecuteNonQuery();
          lastID = (int)paramOutId.Value;
          con.Close();
      }