2017-07-29 7 views
-1

Im a n00b with c#、しばらくの間、vbaを使用していた。C#でSQLを使用してアクセスデータベースを更新する - DATEの問題

私はこのコードを持っている:

OleDbCommand sqlcom = new OleDbCommand("UPDATE tblpack SET packeduser = 1 AND packeddate ='" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "' WHERE packid = " + packid, con); 

私はそれが私の次のステップ、イムは本当にただ今基礎を学習することになるという、parametizedイマイチ知っています。

私の問題は日付のセクションがなく、update sqlは正常に動作します。

日付セクションにはエラーはありませんが、SQLは終了しません。

私は非実行クエリで停止し、SQLは正常に見えます... アクセスの私の日付フィールドは空白に設定されていますが、私は運もない "一般的な日付"を試しています。

任意のアイデア/

UPDATE:!?あなたは私も学習にセキュリティ上skimpingすべきではない、100%正しい 謝罪。 私はパラメータ化されたものとして書き直しています。 私はSQLではなく、ANDで私の問題を信じています(午前3時)。 Datetime.nowは実際には文字列に変換する代わりに、Accessに働きます。なぜこれが働いたのかわからないIm私は変換する必要があることについて多くを読んだ!

OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString); 

         string strpacked = "UPDATE tblpack SET packeduser = 1, packeddate = ? WHERE packid = ?"; 

         OleDbDataAdapter dataadapter = new OleDbDataAdapter(); 

         OleDbCommand sqlcom = new OleDbCommand(strpacked, con); 

         sqlcom.Parameters.Add("?", OleDbType.Date, 5).Value = DateTime.Now; 
         sqlcom.Parameters.Add("?", OleDbType.Integer, 5).Value = packid; 

         dataadapter.SelectCommand = sqlcom; 

         con.Open(); 

         sqlcom.ExecuteNonQuery(); 
         row.Cells["clnpackeduser"].Value = "GA"; 
         con.Close(); 
+1

文字列パラメータでSQL文字列を削除するのではなく、パラメータとして値を渡します。 –

+1

パラメータの使用は[あなたの最初のステップ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/configuring-parameters-and-parameter-data-types)にする必要があります。 –

+1

* "私はそれがパラメータ化されていないことを知っています...今はちょうど基本を学んでいます。" * - パラメータ化されたクエリを使用する*は、基本の1つです。なぜ、「正しいことをやっていく」ことができたときに、「間違っている」という問題を抱えて時間を費やすのはなぜですか? –

答えて

0

MS Jet(MS Accessデータベースエンジン)の日付形式は#MM/DD/YYYY hh:mm:ss#です。 したがって、あなたは、このようにコードを変更する必要があります。

OleDbCommand sqlcom = new OleDbCommand("UPDATE tblpack SET packeduser = 1, packeddate =" + DateTime.Now.ToString("#MM/dd/yyyy HH:mm:ss#") + " WHERE packid = " + packid, con); 

は注意してください、私は例から'を削除しました。

MS Jetは日付文字列を解析できず、葉の日付が空白です。

UPDATE:

あなたは、SET句で,代わりANDを使用する必要があります。

+0

**/**と**:**はスラッシュやコロンではなく、日付と時刻の区切り文字であり、時間は24でなければならず、日付シーケンスはISOである必要があります。したがって、 'DateTime.Now .ToString( "#yyyy '/' MM '/' dd HH ':' mm ':' ss#") '。 – Gustav

関連する問題