none
ObjectDataSourceでUpdateMethodを実行すると非ジェネリック メソッドが見つからないというエラーが発生 RRS feed

  • 質問

  • お世話になっております。

    さとと申します。

     

    質問させてください。

     

    ObjectDataSourceのUpdateMethodを使用してデータの更新をしようとすると、下記エラーが発生します。

    「ObjectDataSource 'ObjectDataSource1' では、パラメータ Num, YYMM, original_COUNTER, Genkaを含む非ジェネリック メソッド 'UpdateGenka' が見つかりませんでした。 」

     

    コントロールパラメータで抽出条件を指定してSelectMethodを使って画面上に表示したレコードを、

    UpdateMethodを使って上書きしようとすると、エラーが発生します。

     

    なぜ、”UpdateGenka"がみつからないのでしょうか?

    ヒントをご伝授願います。

     

    <<<<--------------
        <asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False"  AutoGenerateEditButton="True" DataSourceID="ObjectDataSource1">
            <Columns>
                <asp:BoundField DataField="Num" HeaderText="番号"/>
                <asp:BoundField DataField="Genka" HeaderText="原価"/>
                <asp:BoundField DataField="YYMM" HeaderText="年月"/>
                <asp:BoundField DataField="COUNTER" HeaderText="COUNTER"/>
            </Columns>
        </asp:GridView>
         <aspSurprisebjectDataSource
            OldValuesParameterFormatString="original_{0}"  ID="ObjectDataSource1"
            TypeName="Genka" SelectMethod="GetGenka" UpdateMethod="UpdateGenka" Runat="Server">
            <selectparameters>
                <asp:ControlParameter Name="Num" ControlID="iNum" PropertyName="Text" Type="String"  DefaultValue="_"/>
            </selectparameters>
            <UpdateParameters>
                <aspStick out tonguearameter Name="Num" Type="String" />
                <aspStick out tonguearameter Name="YYMM" Type="String" />
                <aspStick out tonguearameter Name="original_COUNTER" Type="Int32" />
                <aspStick out tonguearameter Name="Genka" Type="String" />
            </UpdateParameters>


          </aspSurprisebjectDataSource>  

    -------------->>>>

     

     

    以下は、クラスの内容です。

    <<<<--------------

    Imports system.data.sqlclient
    Imports system.data

    Public Class Genka
        Const conString As String = "Data Source=XXXX;Initial Catalog=YYYY;User ID=WWWW;PASSWORD=ZZZZ"

        Public Shared Function GetGenka(ByVal Num As String) As SqlDataReader
            Dim con As New SqlConnection(conString)

            Dim selectString As String = "SELECT Num, Genka, YYMM, COUNTER FROM CostDATA where Num = @Num ORDER BY YYMM"
            Dim cmd As New SqlCommand(selectString, con)
            cmd.Parameters.AddWithValue("@Num", Num)
            con.Open()

            Dim dtr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            Return dtr
        End Function


        Public Shared Sub UpdateGenka(ByVal original_COUNTER As Integer, ByVal Genka As String)
            Dim con As New SqlConnection(conString)

            Dim updateString As String = "UPDATE CostDATA SET Genka=@Genka WHERE COUNTER=@COUNTER"
            Dim cmd As New SqlCommand(updateString, con)
            cmd.Parameters.AddWithValue("@Genka", Genka)
            cmd.Parameters.AddWithValue("@COUNTER", original_COUNTER)
            con.Open()
            cmd.ExecuteNonQuery()
            con.Close()
        End Sub

    End Class
         

    -------------->>>>
    2008年7月10日 10:33

回答

  • > Public Shared Sub UpdateGenka(ByVal original_COUNTER As Integer, ByVal Genka As String)

     

    の引数に、パラメータ Num, YYMM, original_COUNTER, Genka が全部含まれて
    いないので、シグネチャが違う(=指定されたメソッドと違う)と認識されて、
    「'UpdateGenka' が見つかりませんでした。 」ということになるのだと思いま
    す。

     

    2008年7月10日 11:30

すべての返信

  • > Public Shared Sub UpdateGenka(ByVal original_COUNTER As Integer, ByVal Genka As String)

     

    の引数に、パラメータ Num, YYMM, original_COUNTER, Genka が全部含まれて
    いないので、シグネチャが違う(=指定されたメソッドと違う)と認識されて、
    「'UpdateGenka' が見つかりませんでした。 」ということになるのだと思いま
    す。

     

    2008年7月10日 11:30
  • SurferOnWww

    ご指摘のとおり、引数をすべて指定したらうまく動きました。

     

    ご回答ありがとうございました。

    2008年7月11日 7:38