DateTime错误消息:从字符串转换datetime时转换失败

时间:2010-06-30 12:17:29

标签: c# asp.net sql-server-2005 tsql .net-3.5

我将参数传递给存储过程。 asp.net端的参数代码块是:

SqlConnection con = new SqlConnection(strConn);  
string sqlItemSearch = "usp_Item_Search";  
SqlCommand cmdItemSearch = new SqlCommand(sqlItemSearch, con);  
cmdItemSearch.CommandType = CommandType.StoredProcedure;  

cmdItemSearch.Parameters.Add(new SqlParameter("@Item_Num", SqlDbType.VarChar, 30));  
cmdItemSearch.Parameters["@Item_Num"].Value = txtItemNumber.Text.Trim();  

cmdItemSearch.Parameters.Add(new SqlParameter("@Search_Type", SqlDbType.Int));  
cmdItemSearch.Parameters["@Search_Type"].Value = ddlSearchType.SelectedItem.Value;  

cmdItemSearch.Parameters.Add(new SqlParameter("@Vendor_Num", SqlDbType.VarChar, 10));  
cmdItemSearch.Parameters["@Vendor_Num"].Value = txtVendorNumber.Text.Trim();  

cmdItemSearch.Parameters.Add(new SqlParameter("@Search_User_ID", SqlDbType.Int));  
cmdItemSearch.Parameters["@Search_User_ID"].Value = ddlSeachUser.SelectedItem.Value;  

if (!string.IsNullOrEmpty(txtStartDate.Text))  
{  
    cmdItemSearch.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));  
    cmdItemSearch.Parameters["@StartDate"].Value = Convert.ToDateTime(txtStartDate.Text.Trim());  
}  
else  
{  
    cmdItemSearch.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));  
    cmdItemSearch.Parameters["@StartDate"].Value = Convert.ToDateTime("01/01/1996");  
}  

if (!string.IsNullOrEmpty(txtEndDate.Text))  
{  
    cmdItemSearch.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime));  
    cmdItemSearch.Parameters["@EndDate"].Value = Convert.ToDateTime(txtEndDate.Text.Trim());  
}  
else  
{  
    cmdItemSearch.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime));  
    cmdItemSearch.Parameters["@EndDate"].Value = Convert.ToDateTime(DateTime.Now);  
}  
con.Open();  

SqlDataAdapter ada = new SqlDataAdapter(cmdItemSearch);  
DataSet ds = new DataSet();  
ada.Fill(ds);  

gvSearchResults.DataSource = ds;  
gvSearchResults.DataBind();

我尝试使用

  

DateTime.ParseExact(this.Text,   “dd / MM / yyyy”,null);

但是我得到了同样的错误。 SQL中的corressponding param是DateTime。我目前正在为@StartDate和@EndDate传递空白字段,因此默认值作为参数传递。 ada.Fill(ds)行发生错误。什么会导致错误?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

,解决方案是.......

cmdItemSearch.Parameters["@EndDate"].Value = DateTime.Now;

不是 Convert.ToDateTime(DateTime.Now);

答案 2 :(得分:0)

检查数据库配置使用的文化,并确保传入的日期/时间(由CurrentCulture配置)兼容。

如果您无法控制数据库正在使用的文化,您可以通过在您的脚本中添加SET DATEFORMAT yada yada来强制它接受特定的格式,例如:

SET DATEFORMAT ymd;

SELECT ... WHERE [StartDate] = @StartDate

答案 3 :(得分:0)

默认的.NET DateTime不是有效的SQL DateTime值;这就是错误的来源。如果您要为搜索传递DateTime参数,但没有要搜索的特定值,则应在SQL的DateTime值范围内提供适用于所有搜索的内容。