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();
文字列パラメータでSQL文字列を削除するのではなく、パラメータとして値を渡します。 –
パラメータの使用は[あなたの最初のステップ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/configuring-parameters-and-parameter-data-types)にする必要があります。 –
* "私はそれがパラメータ化されていないことを知っています...今はちょうど基本を学んでいます。" * - パラメータ化されたクエリを使用する*は、基本の1つです。なぜ、「正しいことをやっていく」ことができたときに、「間違っている」という問題を抱えて時間を費やすのはなぜですか? –