我正试图通过文本框在数据库表中插入日期。但是,即使我将字符串转换为Datetime,我仍然会收到以下错误:
"将nvarchar数据类型转换为datetime数据类型导致值超出范围"。
我在数据库中采用了datetime数据类型。这是我的代码:
try
{
SqlCommand cmd = new SqlCommand(@"INSERT INTO tblProject(project_starting_date,project_ending_date)values(@projectstartingdate,@projectendendingdate)", objconn);
//cmd.Parameters.AddWithValue("@projectstartingdate", DateTime.Parse(txtStartingdate.Text).ToString());
//cmd.Parameters.AddWithValue("@projectendendingdate", DateTime.Parse(txtProjectendingdate.Text).ToString());
DateTime stdate;
if(DateTime.TryParse(txtStartingdate.Text, out stdate))
{
//cmd.Parameters.AddWithValue("@projectstartingdate",stdate);
SqlParameter projstrtdate = new SqlParameter("@projectstartingdate", SqlDbType.DateTime);
projstrtdate.Value = stdate;
cmd.Parameters.Add(projstrtdate);
}
DateTime enddate;
if (DateTime.TryParse(txtProjectendingdate.Text, out enddate))
{
//cmd.Parameters.AddWithValue("@projectendendingdate", enddate);
SqlParameter projenddate = new SqlParameter("@projectendendingdate", SqlDbType.DateTime);
projenddate.Value = enddate;
cmd.Parameters.Add(projenddate);
}
if (objconn.State == ConnectionState.Closed)
{
objconn.Open();
}
norowaffected = cmd.ExecuteNonQuery();
objconn.Close();
}
catch (Exception ex)
{
Response.Write( ex.ToString());
}
请指引我哪里做错了?
您的区域设置配置可能试图以错误的意外格式转换数据字符串。
尝试以下操作:
if(DateTime.TryParse(txtStartingdate.Text, out stdate)
{
SqlParameter projectStartingDateParam = new SqlParameter("@projectstartingdate", SqlDbType.DateTime);
projectStartingDateParam.Value = stdate;
cmd.Parameters.Add(projectStartingDateParam);
}
对"projectendingdate"执行相同操作。创建一个SqlDbType等于SqlDbType.DateTime的SqlParameter,并将其添加到查询命令(cmd变量)中。
如果这不起作用,请仔细检查表结构是否为DateTime格式。通过SQLServerManagementStudio直接在数据库中手动插入。
我以前也遇到过同样的问题。我通过删除数据库中相应的列来修复它,并用正确的格式"所以日期时间适合你"重新创建它。问题已解决。数据库中似乎仍然有信息表明它以前是什么格式的。