2012-03-28 9 views
0

私が使用しているデータベースはSybaseのSQL Anywhereです。 v 11.0.1SQL Anywhere/ASP.NET - 出力パラメータ付きのSQLDataSourceの使用

私は行を挿入するために以下のストアード・プロシージャーを持っています。 I はselectステートメントで@@ identity変数を返します。私のASP.NETのWebアプリで

ALTER PROCEDURE "DBA"."Portal_InsertHeader"(in 
theimi integer, in theUser long varchar, in 
theNextServiceDate date) 
RESULT(ident integer) 
BEGIN 

insert into 
InvoiceCreditHeader(imi,createdby,nextServiceDate) 
values(theimi,theUser,theNextServiceDate); 

select @@identity; 

END 

私は SqlDataSourceコントロールに次のように持っています。最後の パラメータで出力タイプを使用しています。私は行が細かい挿入が、私は、「挿入」 方法で出力パラメータをチェックしようとすると、 私はNULL値を取得している.Insertメソッドを呼び出す

<asp:SqlDataSource ID="sqldsHeader" runat="server" 
ConnectionString="<%$ ConnectionStrings:MSPortal %>" 
ProviderName="<%$ 
ConnectionStrings:MSPortal.ProviderName %>" 
InsertCommand="Call 
Portal_InsertHeader(?,?,?)" 
InsertCommandType="StoredProcedure"> 
<InsertParameters> 
<asp:Parameter Name="IMI" Type="Int32" /> 
<asp:Parameter Name="USER" Type="String" /> 
<asp:Parameter Name="NextServiceDate" 
Type="DateTime" /> 
<asp:Parameter direction="Output" 
name="HeaderID" type="Int32" /> 
</InsertParameters> 
<SelectParameters> 
<asp:Parameter Name="ID" Type="Int32" 
DefaultValue="0" /> 
</SelectParameters> 
</asp:SqlDataSource> 

ASP.NETコードの出力 変数にアクセスするには、何を変更する必要がありますか?

+0

これが実行されると、「タイプ 'DBNull'から 'String' " (System.Web.UI.WebControls.SqlDataSourceStatusEventArgsとしてのByVal送信者)がsqldsHeader.Inserted を処理した場合 Me.hfHeaderNum.Value = e.Command.Parameters "HeaderID")。値 End If – user1247395

答えて

0

解決策は、inoutキーワードを使用してストアドプロシージャでパラメタを使用することでした。 「out」を使用していないようでしたが、「inout」に変更するとすべて正常に機能しました

0

名前を間違って参照しましたか?

<SelectParameters> 
    <asp:Parameter Name="HeaderID" Type="Int32" DefaultValue="0" /> 
</SelectParameters> 
+0

いいえInsertedイベントでは、私は正しい変数を参照していますが、DBNUllが含まれています。 – user1247395

+0

私はまた、物事のDB側が実際に@@アイデンティティを適切に返すことを確認するために二重チェックを行います。私は偽の挿入物でクエリを実行し、本当にそれを保存しているかどうかを確認するためにアイデンティティのプリントを行います。 –

関連する問題