VS 2012 と SQL Express を使用しています
C# でデータベースを検索するための Windows フォーム アプリケーションを構築しようとしていますが、クエリにパラメーターとして渡されるフォームにさまざまなコントロールがあります。
クエリのパラメーターが渡されるとは限りません。
次のコードサンプルを試しています。
SELECT a.ID AS 'DealID', a.TradeDate, c.COMPANYNAME AS 'Seller Company', 
       a.SellCommission, h.BROKER_FULLNAME AS 'Seller Trader', 
       j.DisplayName AS 'Seller Broker', d.COMPANYNAME AS 'Buyer Company', 
       a.BuyCommission, g.BROKER_FULLNAME AS 'Buyer Trader', 
       i.DisplayName AS 'Buyer Broker', e.PRODUCT_NAME, f.TYPE_DESC AS 'Quantity Type',
       f.NBR_OF_GALLONS AS 'Quantity Multiplier', a.ContractVolume, a.TotalVolume, 
       a.DeliveryPoint, a.Price, a.ContractStart, a.ContractEnd
FROM Confirmations AS a WITH (nolock) 
LEFT OUTER JOIN COMPANY AS c WITH (nolock) 
  ON c.COMPANY_ID = a.SellCompany
LEFT OUTER JOIN COMPANY AS d WITH (nolock) 
  ON d.COMPANY_ID = a.BuyCompany 
LEFT OUTER JOIN BIOPRODUCTTYPES AS e WITH (nolock) 
  ON e.ID = a.ProductID 
LEFT OUTER JOIN BIO_QUANTITY_TYPE AS f WITH (nolock) 
  ON f.ID = a.QuantityTypeID 
LEFT OUTER JOIN COMPANYBROKER AS g WITH (nolock) 
  ON g.COMPANYBROKER_ID = a.BuyTrader 
LEFT OUTER JOIN COMPANYBROKER AS h WITH (nolock) 
  ON h.COMPANYBROKER_ID = a.SellTrader 
LEFT OUTER JOIN Users AS i WITH (nolock) 
  ON i.ID = a.BuyBroker 
LEFT OUTER JOIN Users AS j WITH (nolock) 
  ON j.ID = a.SellBroker
WHERE (@fromdate IS NULL OR @fromdate=' ' OR a.TradeDate >= @fromdate) 
       AND (@todate IS NULL OR @todate=' ' OR a.TradeDate <= @todate) 
       AND (@buycompanyname IS NULL 
            OR @buycompanyname="" 
            OR a.BuyCompany = (SELECT COMPANY_ID
                               FROM COMPANY
                               WHERE (COMPANYNAME = @buycompanyname)))              
       AND (@sellcompanyname IS NULL 
            OR @sellcompanyname="" 
            OR a.SellCompany = (SELECT COMPANY_ID
                                FROM COMPANY
                                WHERE (COMPANYNAME =@sellcompanyname))) 
       AND (@product IS NULL OR @product="" OR e.PRODUCT_NAME= @product)";
上記のクエリを使用するのではなく、渡したパラメーターに基づいてクエリを動的に作成できますか?これは、テーブルの列に null 値がある場合はレコードを検索しないため、より論理的に見えます。