を得るために210 Iは、.NETとMySQLを使用していないが、Oracleは.NETと同様の日付の変換の問題があります。これをもってsnaeを維持する唯一の方法は、WHERE句の比較と同様に、WHERE句の入力とWHERE句の比較の両方のために、日付値のパラメータを使用することでした。 MySQLの日付パラメータ型を使用して作成したパラメータに、.NETのdatetime値を与えるだけで、変換する必要はありません。
EDITEDサンプルコードを
を追加するには、このコードサンプルは、代わりの値をテキストに変換をコーディングし、SQLコマンドテキストに直接それらのテキスト値を埋め込むの日時値のパラメータを使用することの基本的な技術を示しています。
public DataTable GetAlertsByDate(DateTime start, DateTime end)
{
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(
"SELECT * FROM Alerts WHERE EventTime BETWEEN @start AND @end", conn);
DataTable table = new DataTable();
try
{
SqlParameter param;
param = new SqlParameter("@start", SqlDbType.DateTime);
param.Value = start;
cmd.Parameters.Add(param);
param = new SqlParameter("@end", SqlDbType.DateTime);
param.Value = end;
cmd.Parameters.Add(param);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(table);
}
finally
{
cmd.Dispose();
conn.Close();
conn.Dispose();
}
return table;
}
これはSQL Serverコードですが、この技法はほとんどのデータベースで同じにする必要があります。たとえば、Oracleの場合、Oracleデータアクセスオブジェクトを使用し、パラメータ名に「@」の代わりに「:」を使用するだけです。 MySQLのテクニックも非常に似ているはずです。
cmd.Parameters.AddWithValue("@start", start);
あなたは値がnullでないことを知っているとき、これが動作し、正しいパラメータタイプはのC#型から派生することができます。
多くのデータベースでは、ショートカットは、次のようなパラメータを、作成するために存在してもよいです値。 "AddWithValue"はSQL Server固有のものです。 「追加」も機能しますが、SQL Serverでは廃止されました。
これが役に立ちます。
DB内のレコードをフィルタリングしていますか?上記のコードは、あなたがこれをやっている方法を示していません。 – V4Vendetta
接続やコマンドオブジェクトなどを設定できるSQLServer用に用意されている、使いやすい.netクラスのセットがあると仮定します。データベースへの呼び出しでパラメータを使用する必要があります。また、データベースで必要なものにDateTimeオブジェクトを変換する必要があります。 MySqlの日付を書式設定する方法について心配する必要があるのは間違っているようですが、MySqlのサポートがどれほど優れているかについては間違いかもしれません。 – Chris
私はMySQL 5.1データベースで問題に直面しています。今私は自分の問題を解決していませんでした。いくつかのトリックを教えてください。 –