1

フォームのデータを使用して SQL Server 2008 にデータを入力しようとしています。DateTimePicker を使用してフォームから日付を選択し、このデータをデータベースに入力していますが、フォームを実行しようとすると、次のエラーが発生します。

varchar データ型を datetime データ型に変換すると、範囲外の値になりました。
ステートメントは終了されました

これは、以下の私のフォームのコードです:

private void btnAddBooking_Click(object sender, EventArgs e)
{
            DateTime requested = dtpRequested.Value;
            DateTime pickup = dtpPickup.Value;
            DateTime estDropoff = dtpEstimatedDrop.Value;

            SAF.AddNewBooking(requested, pickup, estDropoff, selectedStatus.StatusId, selectedRate.RateId);
            dtpRequested.CustomFormat = " ";
            dtpPickup.CustomFormat = " ";
            dtpEstimatedDrop.CustomFormat = " ";

            cbStatus.SelectedIndex = 0;
            cbRateOfPayment.SelectedIndex = 0;

            MessageBox.Show("Booking Created");
            tabControl2.SelectTab(2);
}

メソッドを格納するファサードのコードは次のとおりです。

public void AddNewBooking(DateTime requestedD, DateTime pickupD, DateTime estDropOff, int statusId, int rateId)
{
            dao.AddNewBooking(requestedD, pickupD, estDropOff, statusId, rateId);
}//end CreateBooking

これはINSERT私のDAOのステートメントコードです:

sql = "INSERT INTO [Transaction] (TransactionId, RequestedDateOfPickup, ActualDateOfPickup, EstimatedDropOffDate, StatusId, RateId)";
sql += String.Format("VALUES('{0}', '{1}', '{2}', '{3}', {4}, {5})", transactionId, requestedD, pickupD, estDropOff, statusId, rateId);

cn = new SqlConnection(Properties.Settings.Default.UKRENTALSConnectionString);
cmd = new SqlCommand(sql, cn);

cn.Open();
cmd.ExecuteNonQuery();
4

1 に答える 1

2

おそらく、これが実行されているマシンの地域設定と関係があり、最終的に挿入ステートメントに渡される日付形式は、次の行に沿ったものです。

27/09/2012 4:17:42 PM

(私がこれを書いているとき、ここオーストラリアでの現在の日付です)。

SQL Serverは、それを使用している日付形式にキャストしようとしている可能性があり、できません(たとえば、最初のパラメーターは月であると考えていますが、27は12より大きい)。

次の形式で日付をYYYY-MM-DDフォーマットしてみてください。

2012-09-27

または、SQLインジェクションの脆弱性があるため、代わりにパラメーターを使用することをお勧めします。

于 2012-09-27T06:20:55.153 に答える