1
string date=
DateTime.Now.ToString("d.M.yyyy",System.Globalization.DateTimeFormatInfo.InvariantInfo);

String MyString = @"UPDATE cas SET Odhod= '" + label1.Text + "' 
WHERE sifra = " + textBox1.Text + " and Datum = "+date+"";

Datum を使用せずにこの更新を行うと機能しますが、Datum を使用すると機能しません。アクセスデータベースに接続しており、テーブルのデータムフィールドタイプは日付/時刻です。助けてください。

採用はプログラムです: https://www.dropbox.com/s/hx4zduvul8mh2uy/8.4.zip

問題の写真: http://img43.imageshack.us/img43/5189/errorbh.jpg

4

4 に答える 4

0

その理由は、Microsoft Access が実際にDateTime特定の方法を読み取る方法にあります。連結を使用すると、問題が発生する可能性があります。

アクセスは、次の方法でのみ日付/時刻を保存できます。

  • 有効な日付: -657,434 (西暦 100 年 1 月 1 日) から 2,958,465 (西暦 9999 年 12 月 31 日)
  • 有効時間: .0 (00:00:00) から .99999 (23:59:59)

次の方法でフォーマットできます。

  • 格納された値 (倍数) = デフォルトの形式 (一般的な日付) = カスタム形式
  • 36296.0 = 99/5/15 = 1999/05/15 12:00:00 AM

したがって、Microsoft Access の制限に留意する必要があります。SQL は日付をわずかに異なる方法で読み取り、それらをわずかに異なる方法で格納できるためです。コンテキストのわずかな中断が、結果に大きく影響する可能性があります。

最も簡単な方法は、 Parameters に基づいてクエリを実行することです。そうすれば、Access の無効な構文を連結しない可能性があります。これにより、いくつかの問題が軽減されます。

ネイティブ アクセスでは、次の関数を利用します。

関連する日付を時間比較に追加します。

var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 2:11:00 PM#

Convert the time values to string data types before you compare them:

var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)

DateDiff() 関数を使用して、秒などの正確な単位を比較します。

var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:11:00 PM#) = 0 

したがって、ネイティブアクセス クエリは次のようになります。

UPDATE [dbo].[Customer]
SET [dbo].[Customer].[InvoiceDate] = #1/1/99 2:11:00 PM#;

ご覧のとおり、SQL のように機能しようとしますが、SQL ではありません。したがって、パラメーター ベースのクエリを作成することにより、有効な構文が Access データベースに実装されていることを確認できます。Steve が素晴らしい例を投稿したので、コード例は投稿しません。しかし、これがそれらの違いを理解するのに役立つことを願っています。

于 2013-04-09T16:56:06.380 に答える
0

Datum 列の値が日付の値と一致しない可能性があります。Datum 列の値は何ですか? 関連する時間はありますか (例: 午後 1 時 32 分)。

この更新ステートメントには、他にもいくつかの問題があります。SQL インジェクションを回避するには、ORM またはパラメーター化されたクエリを使用する必要があります。

于 2013-04-09T16:29:01.013 に答える