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

C# DateTime错误消息:从字符串转换DateTime时转换失败,c#,asp.net,sql-server-2005,tsql,.net-3.5,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;

我正在将参数传递给存储的进程。 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”,空)

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


这可以帮助您检查数据库配置为使用的区域性,并确保传入的日期/时间(由CurrentCulture配置)兼容

如果您无法控制数据库正在使用的区域性,可以通过在脚本中预先添加SET-DATEFORMAT-yada-yada,强制数据库接受特定格式,例如:

SET DATEFORMAT ymd;

SELECT ... WHERE [StartDate] = @StartDate

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

解决方案是

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

不是Convert.ToDateTime(DateTime.Now)

应该以评论的形式发布-您有足够的代表。对不起,我是Stack Over Flow的新手。下次会小心的。谢谢。尝试了“DateTime.ParseExact”,但仍然得到相同的错误:-(您从textBox获取的DateTime值正确吗?如果是,请在获取值后执行。DateTime newDate=new DateTime(Convert.ToInt32(textBox.Text.Substring(x,y))、Convert.ToInt32(textBox.Text.Substring(x,y))、Convert.ToInt32(textBox.Text.Substring(x,y));使用子字符串new DateTime(需要3个参数,分别为年、月、日)将所需参数放入new DateTime(此处)为什么要转换为Int32?可能与“DateTime.ParseExact”重复,但仍然出现相同错误:-(您能提供一个示例字符串吗?SQL Server DateTime值的最小值是1753年1月1日。如果您要查找最小日期,就到此为止。另外,对于默认DateTime值,而不是转换文本字符串,只需创建一个新的DateTime,如下所示:DateTime defaultDate=new DateTime(1753,1,1);