0
私はコードに最後に挿入されたIDを取得しようとしていますが、パラメータの型がそれぞれint 32またはint64に設定されている場合、11または12が返されます。最後に挿入された行のIDを取得する
これは、私は、これは私は、これは私の後ろに私のコードでそれを呼び出す方法です私のクラスに
Public Shared Function Create_salesOrder(ByVal contact As Integer, ByVal deliveryAddress As String, ByVal Charge As Double, ByVal GrossTotal As Double, ByVal PaymentMode As String, ByVal organisationId As Integer, ByVal userid As String, ByVal amtpaid As Double) As Integer
Dim comm As DbCommand = CreateCommand17()
comm.CommandText = "Sophia_FND_SalesOrder_CREATE"
AddParameter(comm, "@contact", contact, DbType.Int64)
AddParameter(comm, "@deliveryAddress", deliveryAddress, DbType.String)
AddParameter(comm, "@Charge", Charge, DbType.Double)
AddParameter(comm, "@GrossTotal", GrossTotal, DbType.Double)
AddParameter(comm, "@PaymentMode", PaymentMode, DbType.String)
AddParameter(comm, "@organisationId", organisationId, DbType.Int64)
AddParameter(comm, "@userid", userid, DbType.String)
AddParameter(comm, "@amtpaid", amtpaid, DbType.Double)
AddParameter(comm, "@SalesOrderId", DbType.Int64, ParameterDirection.Output)
Dim id As Integer
Dim insertResult As Int32 = -1
Try
insertResult = ExecuteNonQuery6(comm)
id = Convert.ToInt64(comm.Parameters("@SalesOrderId").Value)
Catch ex As Exception
Throw ex
End Try
'Return insertResult <> -1
Return id
End Function
を使用しています機能です
CREATE procedure [dbo].[Sophia_FND_SalesOrder_CREATE](
@contact int,
@deliveryAddress varchar(50),
@Charge float,
@GrossTotal float,
@PaymentMode varchar(50),
@organisationId int,
@userid varchar(50),
@amtpaid float,
@SalesOrderId int OUTPUT
)
as
begin
insert into Sophia_FND_SalesOrder(ContactId, deliveryAddress, Charge, GrossTotal, PaymentMode, organisationId,userid, AmountPaid)
values(@contact,@deliveryAddress, @Charge, @GrossTotal, @PaymentMode, @organisationId, @userid, @amtpaid)
SET @SalesOrderId = SCOPE_IDENTITY()
RETURN @SalesOrderId
end
を使用していますプロシージャです
Dim sale_id As Integer
If IsNothing(Session("soid")) Then
sale_id = Create_salesOrder(CInt(drpcontact.SelectedValue), txtdelivery.Text, lblCharge_unformated.Text, total, drpPayMode.SelectedItem.Text, SessionWrapper.OrganisationId, SessionWrapper.LoggedInUserID, CDbl(txtpayment.Text))
If Not IsNothing(sale_id) Then
Session("soid") = sale_id
Me.MessageBoard1.MessagePanel.CssClass = "errorMessage"
Me.MessageBoard1.MessagePanel.Visible = True
Me.MessageBoard1.MessageLabel.ForeColor = Drawing.Color.Green
Me.MessageBoard1.MessageLabel.Text = "done"
FillGridview()
Else
Me.MessageBoard1.MessagePanel.CssClass = "errorMessage"
Me.MessageBoard1.MessagePanel.Visible = True
Me.MessageBoard1.MessageLabel.ForeColor = Drawing.Color.Red
Me.MessageBoard1.MessageLabel.Text = "Error Occured on creating sales"
End If
end if
私は構文が全く違っていて、私の構文に固執したいと思います。問題は私のクラスの機能にあるはずですが、私はどこでミスをしたのかわかりません。
私はこれを実行するたびに、私はどちらかが完全に間違っているリターンIDとして11または12を得る
おかげ
このコードでは何の問題もありません。このコードの問題点について詳しく説明できますか? – Praveen
私はsqlスタジオでテストしますが、すべてうまく動作しますが、関数をテストすると、 は11または12のいずれかになります。パラメータの型( 'AddParameter(comm、" @SalesOrderId "、DbType .Int32、ParameterDirection.Output) ' )はint32に設定され、パラメータタイプ(' AddParameter(comm、 "@SalesOrderId"、DbType.Int64、ParameterDirection.Output) ' )がint64 @praveenの場合は12です。 – Nipek
こんにちはNipek、ExecuteNonQueryの代わりにExecuteScalerを使って試してみてください。 –