0

テーブルに新しい情報を追加しようとしていますが、日付/時刻を文字から文字列に変換するときに、変換に失敗したというエラーが表示されます

ここに私のコードの一部があります:

try
{
    string sp = "add"; 

    comando.CommandType = CommandType.StoredProcedure;
    comando.CommandText = sp;
    comando.Parameters.Clear();

    comando.Parameters.Add(new SqlParameter("@person", SqlDbType.VarChar));
    comando.Parameters.Add(new SqlParameter("@reason", SqlDbType.VarChar));

    comando.Parameters.Add(new SqlParameter("@information", SqlDbType.VarChar));
    comando.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime));
    comando.Parameters[0].Value = obj.person;
    comando.Parameters[1].Value = obj.reason;
    comando.Parameters[2].Value = obj.information;
    comando.Parameters[3].Value = obj.date;
    comando.ExecuteNonQuery();
}
catch (Exception exc)
{
    throw exc;
}

私が使用している日付の情報を取得するには、obj.date = DateTime.Now;これは正しいですか?

4

2 に答える 2

0

または、使用することができますAddWithValue()

comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = sp;

comando.Parameters.AddWithValue("@person", obj.person);
comando.Parameters.AddWithValue("@reason", obj.reason);
comando.Parameters.AddWithValue("@information", obj.information);
comando.Parameters.AddWithValue("@date", DateTime.Now);

// assuming connection is already open

comando.ExecuteNonQuery();
于 2013-04-01T02:35:26.857 に答える
0

単純な日付/時刻オブジェクトを SQL に送信しても、期待どおりに機能しないことがある理由や方法を思い出せません。

解決策は、日付/時刻オブジェクトをユニバーサルISO 8601 形式に変換することです: yyyyMMdd HH:mm:ss.fff- これは SQL が絶対に好むものです。

これは、実際にベストプラクティスを示しているJ W's answerから抜粋したスニペットです。

const String UniversalDateTime = "yyyyMMdd HH:mm:ss.fff";

comando.CommandType = CommandType.StoredProcedure;
comando.CommandText = sp;

comando.Parameters.AddWithValue("@person", obj.person);
comando.Parameters.AddWithValue("@reason", obj.reason);
comando.Parameters.AddWithValue("@information", obj.information);
comando.Parameters.AddWithValue("@date", obj.date.ToString(UniversalDateTime));

// assuming connection is already open

comando.ExecuteNonQuery();

SQL が日付/時刻文字列表現を受け取ると、値は自動的に SQL の内部日付/時刻値に変換されます。


PS。Tas separator:を使用して ISO 8601 形式も試したことを思い出しますyyyyMMddTHH:mm:ss.fff。en-US SQL ロケールと en-US 以外のロケールを使用する場合にも機能した、スペースを含むバージョンを試してください。

于 2013-04-01T03:04:05.737 に答える