2009-08-12 15 views
1

更新が機能しません。.NETでの難易度の更新

sqlstr ="UPDATE emp SET bDate='"+Convert.ToDateTime(txtbDate.Text)+"'"; 

エンコードテーブルを更新できません。 Parseメソッドも使ってみました。 エラーメッセージを表示します。 charデータ型をdatetimeデータ型に変換すると、範囲外のdatetime値が発生しました。ステートメントは終了されました。

+0

ただ興味深いメモ。形式がYYYY-MM-DD HH:MM:SSの形式(たとえば2009-08-12 12:27:50)の場合、SQL Serverは地域の設定に関係なく常に正しく解析します。 –

+1

パラメータがあなたの友人である理由を参照してください:http://stackoverflow.com/questions/1263125/how-does-sql-query-parameterisation-work/1263142#1263142 – Eric

答えて

4

ユーザからの入力を受け入れるときは、必ずsqlパラメータを使用する必要があります。これは恐らくあなたの問題を解決するだけでなく、セキュリティを向上させるでしょう。あなたはパラメータ化ストアドプロシージャを使用することができます)

+2

私はパラメータ化に同意しますが、.AddWithValueを使用しないことをお勧めします実際に基礎となるデータ型を指定していないので、期待どおりに動作しない可能性があります。例えばhttp://chrisrickard.blogspot.com/2007/06/addwithvalue-is-evil.html – AdaTheDev

-1

あなたはsqlstrに保管するので、それはプレーンな文字列でなければならない。これを試してみてください。

.net datetimeにはSQL DateTimeよりも多くの値が含まれているため、範囲外のエラーです。

パラメータ化されたストアドプロシージャは、SQLインジェクション攻撃に対するセキュリティを強化します。

2

;

sqlstr ="UPDATE emp SET [email protected]"; 
SqlCommand.Parameters.AddWithValue("@bDate", Convert.ToDateTime(txtbDate.Text)); 
2

あなたは一石2羽の鳥を殺すとパラメータを使用することができます。

UPDATE emp SET [email protected] 

と変換を行うためにDateTime.Parse()を使用して、直接日付でパラメータ値を入力します。これにより、今あなたが持っているSQ1注入の問題も解消されます。

3

パラメータ化SQLを使用して、このようにアドホックSQLを使用しないでください:

sqlstr = "UPDATE emp SET [email protected] WHERE...." 

その後、あなたのSqlCommandオブジェクトに、@NewDateパラメータを追加します。

YourSqlCommand.Parameters.Add("@NewDate", SqlDbType.DateTime); 
YourSqlCommand.Parameters["@NewDate"].Value = Convert.ToDateTime(txtbDate.Text); 
0

使用パラメータはに日付を渡しますクエリ ole dbを使用している場合:

sqlstr = "UPDATE emp SET bDate=? " 
command.Parameters.Add(New OleDbParameter("@bDate", Convert.ToDateTime(txtbDate.Text))) 
1

試してみましたか日付の値をSQL形式(yyyy-MM-dd)、2000年12月31日から

乾杯します。

+0

すぐにパラメータ化クエリを使用してソリューションをテストします。 しかしConvert.ToDateTime(txtbDate.Text).ToString( "yyyy-MM-dd")は完全に機能します。 私は半日以上これを試しました。 ありがとうございましたdkartopr ありがとうございました – Dejene

0

"charデータ型をdatetimeデータ型に変換すると、範囲外のdatetime値が発生しました。この文は終了しました。"

日時がSQLのDateTimeで許容される範囲にありません。何時に解析しようとしていますか?私はいくつかの本当に早い時期(例えば1/15/103)にこのエラーを抱えています。日付は任意の開始点からティックで格納されます。 .NET用

開始点は、SQLのための開始点は、私が最終値についてはよく分からない1753年1月1日

ある1/1/0001
です。これらを実行して比較してみてください。コードトレース、またはコンソール書き込み線。

DateTime netDate = DateTime.MinValue;
SqlDateTime sqlDate = SqlDateTime。MinValue; DateTime netMaxDate = DateTime.MaxValue;
SqlDateTime sqlMaxDate = SqlDateTime.MaxValue;

他の人がクエリのパラメータ化について述べたことをお読みください。

+0

なぜこれがダウン表示されましたか?これは彼の実際のエラーに直接対処します(日付の時間が範囲外であるため変換が失敗しました) –