1

datetimeSQLデータベースにを保存しようとしています。私はdatetime2(0)その目的のために変数を使用します。

しかし、私は常にこの例外を受け取ります:

文字列から日付や時刻を変換するときに変換に失敗しました

エラーを生成する私のコードは次のとおりです。

protected void InsertDB(string title, string desc, string cat, string path)
{
    string now = DateTime.Now.ToString("dd-MM-yyyy h:mm:ss tt");
    title = title.Length == 0 ? "Untitled" : title;
    cat = cat.Length == 0 ? "Uncategorized" : cat;
    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
    using (SqlConnection con = new SqlConnection(cs))
    {
        try
        {                    
            SqlCommand cmd = new SqlCommand(@"INSERT INTO gallery (img_title, img_desc, img_cat, img_date, img_path)
                                            VALUES (@title, @desc, @cat, @date, @path)", con);
            con.Open();
            cmd.Parameters.AddWithValue("@title", title.Trim());
            cmd.Parameters.AddWithValue("@desc", desc.Trim());
            cmd.Parameters.AddWithValue("@cat", cat.Trim());
            cmd.Parameters.AddWithValue("@date", now.Trim());
            cmd.Parameters.AddWithValue("@path", path.Trim());
            int result = cmd.ExecuteNonQuery();
            if (result == 1)
            {
                msg_lbl.Visible = true;
                msg_lbl.Text = "New Image is uploaded.";
                title_txt.Text = "";
                desc_txt.Text = "";
                cat_txt.Text = "";                        
            }
            else
            {
                msg_lbl.Visible = true;
                msg_lbl.Text = "Error occured.";
            }
        }
        catch (SqlException ex)
        {
            msg_lbl.Visible = true;
            msg_lbl.Text = ex.Message; //I get this exception here
        }
        catch (Exception ex)
        {
            msg_lbl.Visible = true;
            msg_lbl.Text = ex.Message;
        }

    }
4

3 に答える 3

3

エラーは、SQLクエリで変数「now」を渡すときに発生する必要があります。列Img_dateが日時フィールドの場合は、値を文字列ではなく日時として渡す必要があります。Datetime.Nowパラメータに値を割り当ててみてください@date

cmd.Parameters.AddWithValue("@date", DateTime.Now);
于 2013-01-13T02:13:53.877 に答える
1

列を使用する場合DateTime2は、パラメータタイプを具体的に設定する必要があります。デフォルトではDateTimewithAddWithValueです。

これを試して:

SqlParameter parm = cmd.Parameters.Add("@date", SqlDbType.DateTime2);
parm.Value = DateTime.Now;

MSDNによると:

@dateパラメーターは、サーバー上のdate、datetime、またはdatetime2データ型にマップできます。新しい日時データ型を使用する場合は、パラメーターのSqlDbTypeプロパティをインスタンスのデータ型に明示的に設定する必要があります。Variantを使用するか、パラメーター値を暗黙的に指定すると、datetimeおよびsmalldatetimeデータ型との下位互換性に関する問題が発生する可能性があります。

http://msdn.microsoft.com/en-us/library/bb675168.aspx

お役に立てれば。

于 2013-01-13T02:10:07.863 に答える
0

tsqlは「tt」形式指定子を受け入れないため、このエラーが発生します。

于 2013-01-13T02:10:16.623 に答える