0

値を返すことになっているストアドプロシージャを使用してdbテーブルにレコードを挿入するvb.netアプリケーションがあります。このストアドプロシージャは他の誰かによってセットアップされ、最初はアプリケーションが挿入を行い、返されたxmlで戻り値を取得するWebサービスにリンクされていました。これでdbテーブルにアクセスできましたが、vb.netメソッドで戻り値を受け取る方法がわかりません。

SQlストアドプロシージャスニペット。

     @urlname varchar(500),
@siteid varchar(16),
@origin varchar(50),
@queryid varchar(25)
  AS
SET NOCOUNT ON;
declare @cnt int
declare @serverip varchar(16)
declare @mincnt int
declare @siteservercnt int
select @cnt=COUNT(*) from sites
      where urlname=@urlname
if @cnt = 0
    begin
    insert into sites (urlname,siteid,exported,origin,queryid)
    values(@urlname,@siteid,1,@origin,@queryid)
    select @siteservercnt = COUNT(*) from siteserverip where siteid=@siteid
    if @siteservercnt=0
       begin
            select top 1 @mincnt=COUNT(*),@serverip=serverip from siteserverip
        group by serverip
        order by COUNT(*)
        select top 1 @mincnt=sitecount,
                         @serverip=serverip from serveripcounts
        order by sitecount
        insert into siteserverip values(@siteid,@serverip)
        update serveripcounts set sitecount=sitecount+1
        where serverip=@serverip
        end
    end
SELECT siteid from sites
where urlname=@urlname
return 

挿入を行うための私のvb.netコード

        CommandObj.CommandText = "Getsite"
        CommandObj.CommandTimeout = 90

        Dim newUrl As String = String.Empty

        CommandObj.Parameters.Clear()

        Dim m_param As SqlParameter

        m_param = CommandObj.Parameters.Add("@urlname", SqlDbType.VarChar, 500)
        m_param.Direction = ParameterDirection.Input
        m_param.Value = name


        m_param = CommandObj.Parameters.Add("@siteid", SqlDbType.VarChar, 16)
        m_param.Direction = ParameterDirection.Input
        m_param.Value = siteid

        m_param = CommandObj.Parameters.Add("@origin", SqlDbType.VarChar, 50)
        m_param.Direction = ParameterDirection.Input
        m_param.Value = method

        m_param = CommandObj.Parameters.Add("@queryId", SqlDbType.VarChar, 25)
        m_param.Direction = ParameterDirection.Input
        m_param.Value = forumID


        Dim recordsAffected As Integer = CommandObj.ExecuteNonQuery
4

1 に答える 1

2

ExecuteScalarを使用して、その値を取得できます。ExecuteNonQueryは、最後の選択によって生成された値を取得するときに影響を受けた行の数を返します。ExecuteReaderを使用することもできますが、これは、SPがより多くの列や行を返す可能性がある場合に役立ちます。

'Populate first column and first row value in siteID
Dim siteID As Integer = CommandObj.ExecuteScalar
于 2012-10-31T17:00:45.977 に答える