我正在尝试将datetime
存储到SQL数据库中。我为此目的使用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;
}
}
答案 0 :(得分:3)
在sql查询中传递变量“now”时必须出错。如果列Img_date
是日期时间字段,则必须将该值作为日期时间而不是字符串传递。尝试将值Datetime.Now
分配给参数@date
:
cmd.Parameters.AddWithValue("@date", DateTime.Now);
答案 1 :(得分:1)
使用DateTime2
列时,您需要专门设置参数类型 - 默认为DateTime
AddWithValue
。
试试这个:
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
希望这有帮助。
答案 2 :(得分:0)
您收到该错误,因为tsql不接受'tt'格式说明符。