0

私は以下のコードを持っています

technician_sqlsource.SelectCommand = "Select analyst as Analyst, sample_description, RFA_number, convert(varchar(10), updated_date, 103)as updated_date, customer, po_number, total_charged from New_Analysis_Data where analyst =  '" & FullName & "' and updated_date > '" & CDate(startdate.Text) & "'" & " and updated_date < '" & CDate(enddate.Text) & "'"

これは基本的に sql コマンドを介して sql サーバーに渡され、2 つの日付の間のデータを取得します。これらの日付は、2 つのテキスト ボックス (開始日と終了日) から取得されます。これを実行するとエラーが発生します - varchar データ型から datetime データ型への変換により、範囲外の値が発生しました。

削除する& "'" & " and updated_date < '" & CDate(enddate.Text) & "'"と機能しますが、終了日の問題のようです。

4

4 に答える 4

4

クエリ パラメータを使用してください。

technician_sqlsource.SelectCommand = _
      "SELECT analyst as Analyst, sample_description, RFA_number, " & _
            " convert(varchar(10), updated_date, 103)as updated_date, " & _ 
            " customer, po_number, total_charged " & _ 
      " FROM New_Analysis_Data " & _
      " WHERE analyst = @FullName " & _
            " AND updated_date >= @StartDate AND updated_date < @EndDate"

 With technician_sqlsource.SelectCommand.Parameters
      .Add("@FullName", SqlDbType.VarChar,50).Value = FullName
      .Add("@StartDate", SqlDbType.DateTime).Value = startdate.Text
      .Add("@EndDate", SqlDbType.DateTime).Value = enddate.Text
 End With

これにより、終了日の問題が解決する場合としない場合があります。問題が解決しない場合でも、より明確なエラー メッセージが表示されるはずですが、ほとんどの場合、そのテキスト ボックスに有効な日付形式を入力していません。DatePicker コントロールの使用を検討しましたか?

于 2013-05-24T13:35:44.977 に答える
1

あなたが使うべき最初のオフSqlParameters!!!

はるかに安全で、日付変換の問題も解消されます。

            SqlCommand cmd=new SqlCommand();
            cmd.CommandText = @"
            Select  analyst as Analyst, 
                    sample_description,
                    RFA_number,
                    convert(varchar(10), updated_date, 103) as updated_date,
                    customer,
                    po_number,
                    total_charged
            from    New_Analysis_Data
            where   analyst =  @analyst
            and     updated_date between @startdate and @enddate";

            technician_sqlsource.SelectCommand = cmd;

            technician_sqlsource.SelectCommand.Parameters.Add(new SqlParameter("@analyst", FullName));
            technician_sqlsource.SelectCommand.Parameters.Add(new SqlParameter("@startdate",CDate(startdate.Text)));
            technician_sqlsource.SelectCommand.Parameters.Add(new SqlParameter("@enddate", CDate(enddate.Text)));               
于 2013-05-24T13:40:16.687 に答える
1

古い(安全でない)スタイルを維持したい場合は、これを試すことができます..

technician_sqlsource.SelectCommand = "Select analyst as Analyst, sample_description, RFA_number, convert(varchar(10), updated_date, 103)as updated_date, customer, po_number, total_charged from New_Analysis_Data where analyst =  '" & FullName & "' and updated_date > #" & startdate.Text & "# and updated_date < #" & enddate.Text & "#"

ただし、後でクエリ パラメータを使用する必要があります。..SQLインジェクションを防ぐために!

于 2013-05-24T14:05:01.113 に答える
0

これを試して:

technician_sqlsource.SelectCommand = "Select analyst as Analyst, sample_description, RFA_number, convert(varchar(10), updated_date, 103)as updated_date, customer, po_number, total_charged from New_Analysis_Data where analyst =  '" & FullName & "' and updated_date > '" & CDate(startdate.Text) & "' and updated_date < '" & CDate(enddate.Text) & "'"
于 2013-05-24T13:30:27.637 に答える