AspAlliance.com LogoASPAlliance: Articles, reviews, and samples for .NET Developers
URL:
http://aspalliance.com/articleViewer.aspx?aId=892&pId=-1
CodeSnip: How to Get Id of the Record Using ASP.NET and SQL Server 2000
page
by Sushila Bowalekar Patel
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 31465/ 47

Introduction

In this code snippet we will examine how to get Id of the newly added record using ASP.NET and SQL Server 2000.

We come across cases where we have to get the Id for the newly inserted record.  The Id in our case is an IDENTITY field.  The retrieval of this Id can be done in a variety of ways.  In this article we will see one of the techniques on how we can achieve this retrieval.  We will use the TSQL function, SCOPE_IDENTITY(), that gives us the last identity value generated in the current scope of the current process.

Requirements

·         Visual Studio .NET 2003

·         SQL Server 2000

Listing 1 – Simple WebForm used for the Test

<form id="Form1" method="post" runat="server">
<p>First Name<asp:TextBox id="FirstName" runat="server"></asp:TextBox></p>
<p>Last Name<asp:TextBox id="LastName" runat="server"></asp:TextBox></p>
<p><asp:Button id="btnAddRecord" runat="server" Text="Add"></asp:Button></p>
<p><asp:Label id="lblLastRecordAdded" runat="server"></asp:Label></p>
</form>

We will create a database named DummyDB and a table with the name Employees with Employeeid, FirstName and LastName as column names under the database.  The required SQL Script is given below for reference

Listing 2 - Table Creation Script

CREATE TABLE Employees (Employeeid int IDENTITY (1, 1) NOT NULL, FirstName nvarchar (50), LastName nvarchar (50))

Now that we have the table in place, we will see how to get the Id of newly added record through the code.  We will use the SCOPE_IDENTITY() function for our requirement.  After inserting the new record we simply return the value, as shown below.

Listing 3 – Use SCOPE_IDENTITY()

-- INSERT the new record
 INSERT INTO Employees(FirstName, LastName)
 VALUES(@FirstName, @LastName)
 -- Now return the EmployeeId of the newly inserted record
 SELECT SCOPE_IDENTITY()

The ExecuteScalar() method can be used in ASP.NET since it returns the first column of the first row in the result set returned by the query.

Listing 4 – Use ExecuteScalar()

Below is the code in VB.NET and C#.

Code

VB.NET

Dim conn As SqlConnection
Dim cmd As SqlCommand
Dim strconnection, strsqlinsert As String
Dim Employeeid As String
Private Sub btnAddRecord_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnAddRecord.Click
  strconnection = "server=localhost;uid=sa;password=;database=DummyDB"
  strsqlinsert = "Insert into Employees ( "
  strsqlinsert + = "FirstName ,LastName"
  strsqlinsert + = ")"
  strsqlinsert + = " values ("
  strsqlinsert + = "@FirstName,@LastName"
  strsqlinsert + = ")"
  strsqlinsert + = "; SELECT SCOPE_IDENTITY() ; "
  conn = New SqlConnection(strconnection)
  cmd = New SqlCommand(strsqlinsert, conn)
  cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = FirstName.Text
  cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = LastName.Text
  cmd.Connection.Open()
  Employeeid = cmd.ExecuteScalar
  cmd.Connection.Close()
  lblLastRecordAdded.Text = Employeeid
End Sub

C#

string strconnection, strsqlinsert;
SqlConnection conn;
SqlCommand cmd;
string Employeeid;
private void btnAddRecord_Click(object sender, System.EventArgs e)
{
  strconnection = "server=localhost;uid=sa;password=;database=DummyDB";
  strsqlinsert = "Insert into Employees ( ";
  strsqlinsert += "FirstName ,LastName";
  strsqlinsert += ")";
  strsqlinsert += " values (";
  strsqlinsert += "@FirstName,@LastName";
  strsqlinsert += ")";
  strsqlinsert += "; SELECT SCOPE_IDENTITY() ; ";
  conn = new SqlConnection(strconnection);
  cmd = new SqlCommand(strsqlinsert, conn);
  cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = FirstName.Text;
  cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = LastName.Text;
  cmd.Connection.Open();
  Employeeid = cmd.ExecuteScalar().ToString();
  cmd.Connection.Close();
  lblLastRecordAdded.Text = Employeeid;
}

Figure 1

NOTE

Although SCOPE_IDENTITY and @@IDENTITY return the last identity value generated for any table in the current session, SCOPE_IDENTITY returns value only in current scope whereas @@IDENTITY returns value across all scopes.

IDENT_CURRENT returns the last identity value generated for a specific table in any session and any scope.

Downloads
Summary

In the sample code we have achieved the functionality by using the SCOPE_IDENTITY() function. We can also use IDENT_CURRENT and @@IDENTITY as per our requirement.



©Copyright 1998-2024 ASPAlliance.com  |  Page Processed at 2024-03-19 2:24:43 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search