6

私はC#DateTimeクラスを持っていて、データベースに挿入するためにSQL Server CEクエリでフォーマットする必要がある方法を知りたいと思っていました。日付と時刻の両方を挿入したいと思っていました。現在、そのバリエーションを試してみると無効になります。フォーマットの例外。

私が使用している現在の形式は次のとおりです。 dd/MM/yyyy、のようなことをしたいと思っていましたdd/MM/yyyy hh:mm:ss

私が挿入しようとしている方法は次のようなものです。

 ( ( DateTime )_Value ).ToString( "dd/MM/yyyy hh:mm:ss" )

明らかにhh:mm:ss機能していません。そうでない場合はdd/MM/yyyy、クエリで正常に実行されます。

私はグーグルで見つけたものを含むいくつかのフォーマットを試しましたが、今のところうまくいきません...

4

5 に答える 5

18

フォーマットを正しくすることを心配しているのなら、何かがすでに深刻な問題を抱えています。sqlceだけでなく、任意のデータベースで日時値を正しく処理するために実行する必要がある2つのことがあります。

  1. 列に日時タイプを使用していることを確認してください(varcharのようなテキストタイプではありません)
  2. 文字列の連結ではなく、パラメータ化されたクエリで日時パラメータを使用していることを確認してください。

そうすれば、あなたの側に関係するフォーマットはありません。まったく。例:

 void SetDate(int recordID, DateTime timeStamp)
 {
    string SQL = "UPDATE [sometable] SET someDateTimeColumn= @NewTime WHERE ID= @ID";

    using (var cn = new SqlCeConnection("connection string here"))
    using (var cmd = new SqlCeCommand(SQL, cn))
    {
        cmd.Parameters.Add("@NewTime", SqlDbType.DateTime).Value = timeStamp;
        cmd.Parameters.Add("@ID", SqlDbType.Integer).Value = recordID;

        cn.Open();
        cmd.ExecuteNonQuery();
    }
} 

文字列操作を使用してSQLクエリに値を代入することはありません。それは大きなノーノーです。

于 2012-08-20T02:42:58.363 に答える
6

次の形式を試してください。

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
于 2012-08-20T02:25:26.703 に答える
1

文字列をDateTimeに変換する必要はありません。

新しいDateTimeのインスタンスを使用し、日付をパラメーターとして渡します。このような:

using (var ctx = new DBPreparoEntities())
{
    var _client = from p in ctx.Client
                     select new Client
                     {
                         data = new DateTime(2016,08,17),
                         dateconf = null,
                         scod_cli = p.Rua,
                         valorini = 7214.62m,
                     };
    return client.ToList();
}

使用しないでください:

... data = DateTime.Parse("2016/12/10") // or other type convertions.
于 2016-10-27T20:46:50.987 に答える
0

申し訳ありませんが、これはvb.netにありますが、これはCEの日付/時刻形式から変換するために使用する方法です。

Public Shared Function ConvertSqlDateTimeFormat(ByVal s As String) As String
    Dim theDate As New Text.StringBuilder
    Dim sTemp As String = ""
    Dim iIndex As Integer

    If s.Length > 8 Then
        'first we do the time
        iIndex = s.IndexOf(" ", System.StringComparison.OrdinalIgnoreCase)
        If iIndex > 0 Then
            sTemp = s.Substring(iIndex).Trim
            iIndex = sTemp.IndexOf(".", System.StringComparison.OrdinalIgnoreCase)
            If iIndex > 0 Then
                sTemp = sTemp.Substring(0, iIndex)
            End If
        End If

        'next the date
        theDate.Append(s.Substring(4, 2))
        theDate.Append("/")
        theDate.Append(s.Substring(6, 2))
        theDate.Append("/")
        theDate.Append(s.Substring(0, 4))
        theDate.Append(" ")
        theDate.Append(sTemp)
    End If
    Return theDate.ToString
End Function
于 2012-08-20T02:23:15.953 に答える
0
private void button1_Click(object sender, EventArgs e)
{
    var cnn1 ="";//connection string 
    SqlCeConnection cnn = new SqlCeConnection(cnn1);   
    datetime dt4 = DateTime.Today.Date.ToString("yyyyMMdd").trim();//format 
    var qry ="insert into tbl_test(User_Id, DateOfJoin)values (11,'" + dt4 + "')";
   
    cmd = new SqlCeCommand(qry, cnn);
   
    try
    {
        dr = cmd.ExecuteReader();
    }
    catch (Exception ex)
    {
        string sr = ex.Message;
        throw;
    }
}

上記のコードは私のために働いた。

1

于 2020-04-27T15:53:58.223 に答える