VB.net: Why can't I get the return value from my own stored procedure?

Why can't I get the return value (Scope_Identity) by running my own stored procedure (SQL Server 2008) using this code below written in VB.NET 2008? SP inserts a new record into table1, but I have 0 as the return value!

What is wrong with him?

here is my vb.net code and my SP:

Public Function Insert(ByVal Obj As entity, connectionString As String) As Integer
    Dim ScopeIdentity As Integer
    Dim Connection As New SqlConnection(connectionString)
    Using Command As New SqlCommand
        With Command
            .Connection = Connection 
            .CommandTimeout = 300
            .CommandType = CommandType.StoredProcedure
            .CommandText = "S_Test"
            If .Connection.State <> ConnectionState.Open Then
                .Connection.Open()
            End If
            SqlCommandBuilder.DeriveParameters(Command)
            With .Parameters
                 .Item("@Name").Value = Obj.Name
                .Item("@Age").Value = Obj.Age
            End With
            Dim ScopeIdentityParameter As New SqlParameter("ReturnValue", SqlDbType.Int)
            ScopeIdentityParameter.Direction = ParameterDirection.ReturnValue
            Command.Parameters.Add(ScopeIdentityParameter)
            Command.ExecuteNonQuery()
            ScopeIdentity = System.Convert.ToInt32(ScopeIdentityParameter.Value)
        End With
    End Using
    Return ScopeIdentity
End Function

my own simple stored procedure structure:

 insert into dbo.Table1(Name, Age) values(@Name, @Age)
 return SCOPE_IDENTITY() 
+3
source share
3 answers

VB, (: Command.ExecuteScalar(), Command.ExecuteNonQuery() SELECT SCOPE_IDENTITY() proc) OUT, : set @ReturnValue = SCOPE_IDENTITY() return SCOPE_IDENTITY()

VB , proc , return SCOPE_IDENTITY() .

SCOPE_IDENTITY(): http://msdn.microsoft.com/en-us/library/ms190315.aspx

+2

,

ScopeIdentity = System.Convert.ToInt32(ScopeIdentityParameter.Value)

:

ScopeIdentity = System.Convert.ToInt32(ReturnValue.Value)
+1

, , , , , .

SqlCommandBuilder.DeriveParameters.

DeriveParameters paralameter returnValue "@RETURN_VALUE", , .

You can also skip DeriveParameters and add all parameters yourself, for example using AddWithValue or similar, including the ReturnValue parameter (with any name you like).

But executing DeriveParameters and adding the ReturnValue parameter will not work either.

0
source

Source: https://habr.com/ru/post/1787100/


All Articles