Returning SCOPE_IDENTITY from SQLDataSource and DetailsView

D

David Lozzi

Howdy,

ASP.Net 2.0 using VB on SQL 2005

This is a two fold issue.

I have a DetailsView control which users can insert or edit items. Editing
works great. Insert works great however I need to display the form once the
user has entered the information and clicked Add.

1) Trying to get the record ID of the inserted record. ReturnValue doesnt
appear to work properly so i'm using an OUTPUT value instead. I get Null
reference errors when working with RETURN SCOPE_IDENTITY()

2) Getting "Procedure or function cp_InsertPublication has too many
arguments specified" error when trying to insert. See code below. All
parameters match up fine.

3) I've tried the following as well, and recieve the same errors:

Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e
As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles
SqlDataSource1.Inserting
Dim para As New System.Data.SqlClient.SqlParameter("returnValue",
TypeCode.Int32, 4, Data.ParameterDirection.ReturnValue)
e.Command.Parameters.Add(para)

End Sub


Thanks!!

David Lozzi


<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:SMALLConnectionString %>"
DeleteCommand="DELETE FROM [tblPublications] WHERE [ID] = @ID"
InsertCommand="cp_InsertPublication"
InsertCommandType="StoredProcedure"
SelectCommand="SELECT * FROM [tblPublications] WHERE ([ID] =
@ID)"
UpdateCommand="UPDATE [tblPublications] SET [strName] =
@strName, [dtDate] = @dtDate, [strPDF] = @strPDF, [intPages] = @intPages,
[strWrittenBy] = @strWrittenBy, [intType] = @intType, [dtModified] = {fn
Now()} WHERE [ID] = @ID">
<DeleteParameters>
<asp:parameter Name="ID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:parameter Name="strName" Type="String" />
<asp:parameter Name="dtDate" Type="DateTime" />
<asp:parameter Name="intPages" Type="Int32" />
<asp:parameter Name="strWrittenBy" Type="String" />
<asp:parameter Name="dtAdded" Type="DateTime" />
<asp:parameter Name="dtModified" Type="DateTime" />
<asp:parameter Name="intType" Type="int32" />
<asp:ControlParameter Name="strPDF"
ControlID="dvDetails$Label5" PropertyName="Text" />
<asp:parameter Name="ID" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="ID" QueryStringField="PID"
Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:parameter Name="strName" Type="String" />
<asp:parameter Name="dtDate" Type="DateTime" />
<asp:parameter Name="intPages" Type="Int32" />
<asp:parameter Name="strWrittenBy" Type="String" />
<asp:parameter Name="intType" Type="int32" />
<asp:parameter Name="returnValue" Type="int32"
Direction="output" />
</InsertParameters>
</asp:SqlDataSource>



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[cp_InsertPublication]
@strName as varchar(500),
@dtDate as datetime,
@intPages as int,
@strWrittenBy as varchar(50),
@intType as int,
@returnValue as int OUTPUT
AS

INSERT INTO [tblPublications]
([strName], [dtDate], [intPages], [strWrittenBy], [intType], [dtAdded],
[dtModified])
VALUES
(@strName, @dtDate, @intPages, @strWrittenBy, @intType, {fn Now()}, {fn
Now()})

SET @returnValue = SCOPE_IDENTITY()
 
L

Light

Hi, David,

After posting my post today (Re: Problem with the Legacy ASP files and the
Sql Server Express) and then I saw this post by you, I realize we are
actually haiving the same problem, so do you have any resolution for it yet?


David Lozzi said:
Howdy,

ASP.Net 2.0 using VB on SQL 2005

This is a two fold issue.

I have a DetailsView control which users can insert or edit items. Editing
works great. Insert works great however I need to display the form once
the
user has entered the information and clicked Add.

1) Trying to get the record ID of the inserted record. ReturnValue doesnt
appear to work properly so i'm using an OUTPUT value instead. I get Null
reference errors when working with RETURN SCOPE_IDENTITY()

2) Getting "Procedure or function cp_InsertPublication has too many
arguments specified" error when trying to insert. See code below. All
parameters match up fine.

3) I've tried the following as well, and recieve the same errors:

Protected Sub SqlDataSource1_Inserting(ByVal sender As Object, ByVal e
As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles
SqlDataSource1.Inserting
Dim para As New System.Data.SqlClient.SqlParameter("returnValue",
TypeCode.Int32, 4, Data.ParameterDirection.ReturnValue)
e.Command.Parameters.Add(para)

End Sub


Thanks!!

David Lozzi


<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:SMALLConnectionString %>"
DeleteCommand="DELETE FROM [tblPublications] WHERE [ID] = @ID"
InsertCommand="cp_InsertPublication"
InsertCommandType="StoredProcedure"
SelectCommand="SELECT * FROM [tblPublications] WHERE ([ID] =
@ID)"
UpdateCommand="UPDATE [tblPublications] SET [strName] =
@strName, [dtDate] = @dtDate, [strPDF] = @strPDF, [intPages] = @intPages,
[strWrittenBy] = @strWrittenBy, [intType] = @intType, [dtModified] = {fn
Now()} WHERE [ID] = @ID">
<DeleteParameters>
<asp:parameter Name="ID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:parameter Name="strName" Type="String" />
<asp:parameter Name="dtDate" Type="DateTime" />
<asp:parameter Name="intPages" Type="Int32" />
<asp:parameter Name="strWrittenBy" Type="String" />
<asp:parameter Name="dtAdded" Type="DateTime" />
<asp:parameter Name="dtModified" Type="DateTime" />
<asp:parameter Name="intType" Type="int32" />
<asp:ControlParameter Name="strPDF"
ControlID="dvDetails$Label5" PropertyName="Text" />
<asp:parameter Name="ID" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="ID" QueryStringField="PID"
Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:parameter Name="strName" Type="String" />
<asp:parameter Name="dtDate" Type="DateTime" />
<asp:parameter Name="intPages" Type="Int32" />
<asp:parameter Name="strWrittenBy" Type="String" />
<asp:parameter Name="intType" Type="int32" />
<asp:parameter Name="returnValue" Type="int32"
Direction="output" />
</InsertParameters>
</asp:SqlDataSource>



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[cp_InsertPublication]
@strName as varchar(500),
@dtDate as datetime,
@intPages as int,
@strWrittenBy as varchar(50),
@intType as int,
@returnValue as int OUTPUT
AS

INSERT INTO [tblPublications]
([strName], [dtDate], [intPages], [strWrittenBy], [intType], [dtAdded],
[dtModified])
VALUES
(@strName, @dtDate, @intPages, @strWrittenBy, @intType, {fn Now()}, {fn
Now()})

SET @returnValue = SCOPE_IDENTITY()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,968
Messages
2,570,149
Members
46,695
Latest member
StanleyDri

Latest Threads

Top