【解決方法】VB.NET アプリからトリガーされたときに SQL ストアド プロシージャが正しく動作しない

プログラミングQA


やあ、

vb.net winforms 検索フォームで使用される SQL Server ストアド プロシージャがあります。

SQL
	@JobNumber nvarchar(12) = NULL,
	@CompanyID integer = NULL,
	@Title nvarchar(100) = NULL

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 a.Contact,
                 a.Company_ID, 
                 a.Job,
                 a.Enquiry,
                 a.Start,
                 a.Closed, 
                 a.Title, 
                 b.Company 
                 FROM Job_List a 
                 INNER JOIN Company b ON a.Company_ID = b.Company_ID 
                 WHERE (a.job LIKE @JobNumber + '%' OR @JobNumber IS NULL) 
				 AND	(a.Company_ID = @CompanyID OR @CompanyID iS NULL)
				 AND	(a.title LIKE '%' + @Title + '%'OR @Title IS NULL) 
                 ORDER BY Job

SSMS からストアド プロシージャを実行し、パラメーターを 1 つだけ指定すると、期待どおりの結果が返されます。

ただし、これを使用してアプリケーション内からプロシージャを実行しようとすると、次のようになります。

VB
Using con As New SqlConnection(strConnection)

    Using cmd As New SqlCommand("dbo.AA_JobSearch")
        cmd.Connection = con

        cmd.Parameters.AddWithValue("@JobNumber", txtJobNumber.Text)
        cmd.Parameters.AddWithValue("@CompanyID", CompanyID)
        cmd.Parameters.AddWithValue("@Title", txtTitleSearch.Text)

        Using sda As New SqlDataAdapter(cmd)
            Dim dt As New DataTable
            sda.Fill(dt)

(CompanyID 変数は、別のクエリから派生した整数です) これは、データ グリッド ビューのデータ ソースです。 指定したパラメーターの数に関係なく、データ グリッド ビューにはテーブル内のすべてのレコードが入力されます。つまり、フィルター処理は行われません。

私が試したこと:

VBパラメータステートメントをAddWithValveではなくAddで書き直そうとしましたが、これは文字列から整数への例外が発生するだけです。 私はインターネットで解決策を探すのに何時間も費やしましたが、まだ解決策は見つかりませんでした。
SQL 側は意図したとおりに動作しますが、VB.net 側に同じことをさせることができないのでイライラします。
ご協力をよろしくお願いいたします。

コメント

タイトルとURLをコピーしました