0

次のような SQL Server 2005 のストアド プロシージャがあります。

CREATE PROCEDURE [dbo].[REP_PayRange]
    @StartDate datetime = NULL,
    @EndDate datetime = NULL
AS
BEGIN
    SET NOCOUNT ON;
    SELECT * FROM Payment WHERE PayTime BETWEEN @StartDate AND @EndDate
END

それが実行され、次を実行して SQL 内から結果を取得します。

EXEC REP_PayRange '1 Jan 2012', '10 Jan 2012'

私が苦労しているのはVisual Studioです。

私が取っている手順は次のとおりです。

  1. Visual Basic 言語を選択して、新しい空白の「Web フォーム」/aspx ページを作成します。
  2. GridView を挿入する
  3. データソースを選択し、「データベース」を選択します
  4. 動作確認済みのデータ接続を選択してください (SQL Server Native)
  5. 「カスタム SQL ステートメントまたはストアド プロシージャを指定する」
  6. 「ストアド プロシージャ:」「REP_PayRange」を選択します。
  7. StartDate には "Parameter source: None" と Default Value "1 Jan 2012" を選択し、EndDate には "Parameter source: None" と Default Value "10 Jan 2012" を選択します。
  8. [クエリのテスト] ページで [クエリのテスト] をクリックし、値が上で指定した値であり、データが返されないことを確認します。これを保存してブラウザーでプレビューすると、GridView は空になります。

このメソッドを使用して Web ページを作成し、後でパラメーター ソースをデフォルト値ではなくカレンダーに変更できるようにしたいと考えています。

ヘルプやヒントを事前にありがとうございます。

4

1 に答える 1

1

次の 2 つのことを行う必要があります。

(a) 地域や言語に依存するスタイルで文字列をフォーマットするのをやめる。のような、適切で標準的な明確な形式を使用してください'YYYYMMDD'。Web フォームは、適切に型指定されたパラメーターを渡すか.Format()、この「2012 年 1 月 1 日」のナンセンスを取り除くために使用する必要があります。

(b)BETWEEN日付範囲クエリの使用をやめます。これは非常にあいまいになる可能性があるためです (datetime 列に時間が含まれていないと思われる場合でも、それが何を意味すると考えていますか?)

背景:

于 2012-07-10T01:40:44.580 に答える