[ad_1]
やあ、
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 側に同じことをさせることができないのでイライラします。
ご協力をよろしくお願いいたします。
[ad_2]
コメント