2017-06-20 26 views
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を得る

おかげ

+0

このコードでは何の問題もありません。このコードの問題点について詳しく説明できますか? – Praveen

+0

私はsqlスタジオでテストしますが、すべてうまく動作しますが、関数をテストすると、 は11または12のいずれかになります。
パラメータの型( 'AddParameter(comm、" @SalesOrderId "、DbType .Int32、ParameterDirection.Output) ' )はint32に設定され、パラメータタイプ(' AddParameter(comm、 "@SalesOrderId"、DbType.Int64、ParameterDirection.Output) ' )がint64 @praveenの場合は12です。 – Nipek

+0

こんにちはNipek、ExecuteNonQueryの代わりにExecuteScalerを使って試してみてください。 –

答えて

0

は、背後にある私のコードでこれを入れて変更しなければならなかったし、これがそうです私のために働く。ありがとう

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 
関連する問題