2

以下を読んで、さまざまな方法で再構築を試みましたが、明確にするために、最後の試みを示します。

目的 - 列「UniqueID」の最大値を取得する

列フィールド「uniqueID」はbigintとして設定されています

戻り値として「int」を取得するため、エラーはaddwithvalueの行にあると思います

クエリを実行すると動作しSELECT MAX(UniqueID) FROM tblResults in SQLます

コード

 Dim connection5 As SqlConnection
    Dim command5 As New SqlCommand
    Dim ds5 As New DataSet
    Dim ConnectionString5 As String = System.Configuration.ConfigurationManager.ConnectionStrings("mySQLConnectionString").ToString()
    connection5 = New SqlConnection(ConnectionString5)

    connection5.Open()
    command5.Connection = connection5
    command5.Parameters.Clear()

    command5.CommandText = "spUniqueUserID"
    command5.Parameters.AddWithValue("@UniqueID", SqlDbType.BigInt)
    command5.Parameters("@UniqueID").Direction = ParameterDirection.Output
    command5.CommandType = CommandType.StoredProcedure
    command5.ExecuteNonQuery()

    Session.Item("UniqueID") = command5.Parameters("@UniqueID").Value
    connection5.Close()

    Dim vShow As String
    vShow = ""
    vShow = Session.Item("UniqueID").ToString

SP

USE [DB]
GO
/****** Object:  StoredProcedure [dbo].[spUniqueUserID]    Script Date: 09/10/2013 08:51:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spUniqueUserID]

@UniqueID bigint OUTPUT

AS

BEGIN

select @UniqueID = (SELECT MAX(UniqueID) FROM tblResults )

Return @UniqueID

END
4

3 に答える 3

4

私は個人的に出力パラメータをいじりません。単に使用する

ALTER PROCEDURE [dbo].[spUniqueUserID]

AS

BEGIN

 SELECT MAX(UniqueID) FROM tblResults

END

あなたの手続きで、そして

Dim sqlConnection1 As New SqlConnection("Your Connection String")
Dim cmd As New SqlCommand
Dim returnValue As Object

cmd.CommandText = "spUniqueUserID"
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = sqlConnection1

sqlConnection1.Open()

returnValue = cmd.ExecuteScalar()

sqlConnection1.Close()

あなたのコードで。(接続とコマンドにステートメントを使用するのが最適ですが、ここでは簡潔にするために欠落しています)

于 2013-09-10T09:17:58.183 に答える
1

試してみてください

 command5.Parameters.AddWithValue("@UniqueID", 0L)

AddWithValue は、2 番目のパラメーターのデータ型を参照して、基になるエンジンに渡すパラメーターの DataType を決定します。文字列を渡しますが、これは確かに間違っています。

別の方法として、パラメータを明示的に定義することもできます

 Dim parameter = new SqlParameter("@UniqueID", SqlDbType.BigInt)
 parameter.Direction = ParameterDirection.Output
 parameter.Size = 8
 parameter.Value = 0
 command5.Parameters.Add(parameter)

そして、最後の基本的な手順として、このコマンドがストアドプロシージャを実行することを指定してから、コマンドを実行することを忘れないでください

 command5.CommandType = CommandType.StoredProcedure
 command5.ExecuteNonQuery()

別の方法として、これにはストアド プロシージャの変更が必要ですが、ExecuteScalar を使用することです。このメソッドは、コードから単一の結果が必要な場合に使用する必要があります。

ALTER PROCEDURE [dbo].[spUniqueUserID]
AS

BEGIN
    select SELECT MAX(UniqueID) FROM tblResults
END

そしてあなたのコードで

    Using connection5 = New SqlConnection(ConnectionString5)
    Using command5 As New SqlCommand("spUniqueUserID", connection5)
         connection5.Open()
         command5.CommandType = CommandType.StoredProcedure
         Dim result = command5.ExecuteScalar()
         .....
    End Using
    End Using

しかし、この時点では、ストアドプロシージャの有用性は本当に最小限であり、SqlCommand のコンストラクターで SQL を直接コーディングし、CommandType 設定を削除することができます。

    Using connection5 = New SqlConnection(ConnectionString5)
    Using command5 As New SqlCommand("SELECT MAX(UniqueID) FROM tblResults", connection5)
         connection5.Open()
         Dim result = command5.ExecuteScalar()
         .....
    End Using
    End Using
于 2013-09-10T09:15:13.900 に答える
0
 Dim ConnectionString5 As String = System.Configuration.ConfigurationManager.ConnectionStrings("mySQLConnectionString").ToString()

        Using connection5 = New SqlConnection(ConnectionString5)
            Using command5 As New SqlCommand("SELECT MAX(UniqueID) FROM tblResults", connection5)

                connection5.Open()
                Dim result = command5.ExecuteScalar()

                Session.Item("UniqueID") = result
                connection5.Close()
            End Using
        End Using

        Dim vShow As String
        vShow = ""
        vShow = Session.Item("UniqueID").ToString
于 2013-09-10T10:35:44.803 に答える