获取最后插入的行的ID
问题描述:
我一直在试图将最后一个插入的ID插入到我的代码中,但是如果参数类型分别设置为int 32或int64,则返回11或12作为返回的ID。获取最后插入的行的ID
这是我使用
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
这是我用在我的课的功能的过程
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
这是我后面把它在我的代码
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
我发现了一种工作方式,但语法完全不同,我想坚持我的语法。这个问题应该在我的班级职能,但我似乎不知道我犯了什么错误。
每当我运行此,我要么得到11或12返回ID这是完全错误的
感谢
答
必须改变把这个在我后面的代码,这似乎为我工作。谢谢
Dim sale_id As Integer
' Dim saleslastid As Integer
Dim salecreate_line As Boolean
If IsNothing(Session("soid")) Then
' slastid = SalesOrder_id()
' saleslastid = StringHelper_2_0.ClearDBNullError(slastid.Rows(0)("id"))
'sale_id = Create_salesOrder(CInt(drpcontact.SelectedValue), txtdelivery.Text, lblCharge_unformated.Text, total, drpPayMode.SelectedItem.Text, SessionWrapper.OrganisationId, SessionWrapper.LoggedInUserID, CDbl(txtpayment.Text))
Dim strConnString As String = ConfigurationManager.ConnectionStrings("SophiaERP_Foundation_4").ConnectionString
Dim con As New SqlConnection(strConnString)
Dim cmd As New SqlCommand()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "Sophia_FND_SalesOrder_CREATE"
cmd.Parameters.Add("@contact", SqlDbType.Int).Value = CInt(drpcontact.SelectedValue)
cmd.Parameters.Add("@deliveryAddress", SqlDbType.VarChar).Value = txtdelivery.Text
cmd.Parameters.Add("@Charge", SqlDbType.Float).Value = lblCharge_unformated.Text
cmd.Parameters.Add("@GrossTotal", SqlDbType.Float).Value = total
cmd.Parameters.Add("@PaymentMode", SqlDbType.VarChar).Value = drpPayMode.SelectedItem.Text
cmd.Parameters.Add("@organisationId", SqlDbType.Int).Value = SessionWrapper.OrganisationId
cmd.Parameters.Add("@userid", SqlDbType.VarChar).Value = SessionWrapper.LoggedInUserID
cmd.Parameters.Add("@amtpaid", SqlDbType.Float).Value = 0
cmd.Parameters.Add("@duration", SqlDbType.Int).Value = CInt(lblduration.Text)
cmd.Parameters.Add("@SalesOrderId", SqlDbType.Int).Direction = ParameterDirection.Output
cmd.Connection = con
Try
con.Open()
cmd.ExecuteNonQuery()
sale_id = cmd.Parameters("@SalesOrderId").Value
Catch ex As Exception
Throw ex
Finally
con.Close()
con.Dispose()
End Try
end if
我没有看到任何关于此代码的问题。你能详细解释一下这段代码的问题吗? – Praveen
我在SQL Studio测试,一切运作良好,但是当我测试的功能, 我要么得到11或12返回的ID始终是11,如果参数类型('AddParameter(COMM,“@SalesOrderId”的DbType .Int32,ParameterDirection.Output)' )被设置为int32,它是12如果参数类型('AddParameter(COMM “@SalesOrderId”,DbType.Int64,ParameterDirection.Output)' )的INT64 @praveen – Nipek
你好Nipek,使用ExecuteScaler而不是ExecuteNonQuery并试试,希望它能起作用。 –