1

これを機能させるためにいくつかの方法を試しましたが、同じエラーが発生し続けます。列 lisDate (型は DateTime) が日付 (時刻なし) に等しい tblList の行を削除しようとしています。日付が 2012 年 7 月 14 日 (2012 年 7 月 14 日) であり、dbConnection が開いている OleDbConnection であると仮定します。

string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE CAST(lisDate as DATE) = #" + dt + "#", dbConnection);
command.ExecuteNonQuery();

これにより、次のエラーが発生します。

クエリ式 'CAST(lisDate as DATE) = #14/07/2012#' の構文エラー (演算子の欠落)。

DateTime の値を比較したことがないので、これはばかげた質問かもしれませんが、助けていただければ幸いです。ありがとう!

4

2 に答える 2

0

暗黙の日付変換を提供するパラメーターを使用してみてください。

        string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
        OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE lisDate = [pDate]", dbConnection);
        OleDbParameter dateParm = command.Parameters.Add("pDate", OleDbType.Date);
        dateParm.Value = dt;
        command.ExecuteNonQuery();

リビジョン:

日付と時刻の両方をサポートするためのChrisDunawayの鋭いコメントを組み込んだより完全なソリューションは次のとおりです。

    void DeleteByDate()
    {
        try
        {
            using (OleDbConnection dbConnection = new OleDbConnection())
            {
                dbConnection.ConnectionString = myConnectionString;
                dbConnection.Open();
                string dt = string.Format("{0}/{1}/{2}", 14, 07, 2012);
                using (OleDbCommand command = new OleDbCommand("DELETE FROM tblList WHERE lisDate = [pDate]", dbConnection))
                {
                    OleDbParameter dateParm = command.Parameters.Add("pDate", OleDbType.DBTimeStamp);
                    dateParm.Value = dt;
                    command.ExecuteNonQuery();
                }
            }
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
于 2012-11-15T15:17:08.217 に答える
0

私はAccessを手元に持っていませんが、SQLのコードでは大文字と小文字のエラーがあります。クエリ文字列として次のようなものを試してみます。

"delete from tbllist where
cast(lisDate as varchar(9)) = '" +dt +"'"

実際には、より良いでしょう:

"delete from tbllist
where datepart(mm,lisDate) = '07' and
datepart(dd,lisDate) = '14' and
datepart(yy,lisDate = '2012'  -- obviously cancatinating in your values
于 2012-11-15T15:07:49.393 に答える