0

データベースからデータを表示するストアド プロシージャがあります。SQL Server 2008を使用しています。以下のような私のストアドプロシージャ

USE [RSUPDB]
GO
/****** Object:  StoredProcedure [dbo].[spSPDMonStockProductHarian]    Script Date: 07/11/2013 14:56:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[spSPDMonStockProductHarian]
    -- Add the parameters for the stored procedure here
    @Tanggal    Smalldatetime,
    @WHSID      Int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT  NoReff, ProductID,Qnty , CreatedBy, CreatedDate, 
                      LastUpdatedBy, LastUpdatedDate, Computer, ComputerDate
FROM         tblSPDTrnHasilProduksiDtl
Where CreatedDate=@Tanggal 

END

以下のようにvb.netを使用してそのストアドプロシージャを呼び出します

Private Sub CmRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmRefresh.Click
    Dim i As Integer

    Dim strCon1 As String = "server='ip server'; database=database name; user=user;password=password;"
    Dim cmd As SqlCommand = New SqlCommand("spSPDMonStockProductHarian", New SqlConnection(strCon1))
    'cmd.CommandText = "SELECT * FROM tblSPDTrnHasilProduksiDtl"
    With cmd

        .Parameters.Add("@Tanggal", SqlDbType.SmallDateTime).Value = Format(CDate(DateTimePicker1.Value), "dd/MM/yyyy")
        .Parameters.AddWithValue("@WhsID", CboWhs.SelectedValue)
        .Parameters.AddWithValue("@NoReff", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(0).FormattedValue.ToString
        .Parameters.AddWithValue("@ProductID", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(1).FormattedValue.ToString
        .Parameters.AddWithValue("@Qnty", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(2).FormattedValue.ToString
        .Parameters.AddWithValue("@CreatedBy", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(3).FormattedValue.ToString
        .Parameters.AddWithValue("@CreatedDate", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(4).FormattedValue.ToString
        .Parameters.AddWithValue("@LastUpdatedBy", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(5).FormattedValue.ToString
        .Parameters.AddWithValue("@LastUpdatedDate", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(6).FormattedValue.ToString
        .Parameters.AddWithValue("@Computer", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(7).FormattedValue.ToString
        .Parameters.AddWithValue("@Computerdate", SqlDbType.VarChar).Value = Listdata.Rows(i).Cells(8).FormattedValue.ToString
        .Connection.Open()
    End With
    Listdata.DataSource = cmd.ExecuteReader

    Koneksi.Close()
    Koneksi.Close()
End Sub

このプログラムを実行すると問題が発生しますが、まだメッセージが表示されます

プロシージャまたは関数 'spSPDMonStockProductHarian' には、指定されていないパラメーター '@Tanggal' が必要です

私は何が問題なのですか?そして、これは私の頭のスタックを作るので、どんな解決策も感謝します!!

4

1 に答える 1

1

コメントアウトされています

'.Parameters.Add("@Tanggal", SqlDbType.SmallDateTime).Value = Format(CDate(DateTimePicker1.Value), "dd/MM/yyyy")

最初に引用符を削除してみてください。

そうは言っても、あなたのコードは他の理由で失敗します。

プロシージャは、11 以外の 2 つのパラメータのみを想定していました。@Tanggalパラメータは、DateTime として書式設定された文字列ではなく、datatime である必要がありますCommandType。プロパティを StoredProcedure として設定する必要があります。

あなたの手順へのより正しいアプローチはこれかもしれません

Private Sub CmRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmRefresh.Click 
    Dim strCon1 = "server=serverIP; database=database name; user=user;password=password;"
    Dim cmdText = "spSPDMonStockProductHarian"
    Using con = new SqlConnection(strCon1)
    Using cmd = New SqlCommand(cmdText, con)
       With cmd
           .CommandType = CommandType.StoredProcedure
           .Parameters.Add("@Tanggal", SqlDbType.SmallDateTime).Value = dateTimePicker1.Value
           .Parameters.AddWithValue("@WhsID", CboWhs.SelectedValue)
        End With
         con.Open()
        Listdata.DataSource = cmd.ExecuteReader
    End Using
    End Using
End Sub

未使用のパラメーターを削除し、@Tanggal パラメーターを文字列ではなく DateTime として渡しました。また、接続オブジェクトを正しく閉じて破棄するUsing ステートメントを追加しました

于 2013-07-11T08:12:13.033 に答える