2010-06-30 2 views
2

Я передаю параметры сохраненной процедуре. Параметры кодового блока на стороне ASP.NET представляет:Сообщение об ошибке DateTime: Ошибка конверсии при преобразовании даты и времени из строки символов

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);

но я получаю ту же ошибку. Параметр corressponding в SQL - DateTime. В настоящее время я пропускаю пустые поля для @StartDate и @EndDate, поэтому значения по умолчанию передаются как параметры. Ошибка возникает на линии ada.Fill (ds). Что может вызвать ошибку?

+0

Возможный дубликат [String не был признан действительным форматом DateTime «dd/MM/yyyy»] (http://stackoverflow.com/questions/2193012/string-was-not-recognized-as-a- valid-datetime-format-dd-mm-yyyy) – ChrisF

+0

попробовал «DateTime.ParseExact», но все равно получал ту же ошибку :-( – DotNetRookie

ответ

0

Проверьте культуру базы данных настроен на использование и убедитесь, что дата/время передается в (сконфигурированные CurrentCulture), совместим.

Если вы не имеете контроля над культурой базы данных с помощью, вы можете заставить его принять определенный формат, предваряя SET DATEFORMAT болтовня в сценарий, например:

SET DATEFORMAT ymd; 

SELECT ... WHERE [StartDate] = @StartDate 
0

по умолчанию. NET DateTime не является допустимым значением SQL DateTime; это то, из чего исходит ошибка. Если вы собираетесь передать параметр DateTime для поиска, но не имеете определенного значения для поиска, вы должны предоставить что-то в диапазоне значений DateTime SQL, который будет работать для всех ваших поисков.

+0

Можете ли вы предоставить образец строки? – DotNetRookie

+0

Минимальное значение для значений даты SQL Server DateTime - 1 января 1753 года. Если вы ищете минимальную дату, вот и все. Кроме того, для значений по умолчанию DateTime вместо преобразования текстовой строки просто создайте новую DateTime, например: DateTime defaultDate = new DateTime (1753, 1, 1); –

1

и раствор .......

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

не Convert.ToDateTime (DateTime.Now);

Смежные вопросы

 Смежные вопросы