Сообщение об ошибке DateTime: Ошибка преобразования при преобразовании даты и времени из строки символов - PullRequest
2 голосов
/ 30 июня 2010

Я передаю параметры в сохраненный процесс. Блок кода параметров на стороне 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, "дд / мм / гггг", ноль);

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

Ответы [ 4 ]

2 голосов
/ 30 июня 2010
1 голос
/ 30 июня 2010

и решение .......

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

, а не Convert.ToDateTime (DateTime.Now);

0 голосов
/ 30 июня 2010

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

0 голосов
/ 30 июня 2010

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

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

SET DATEFORMAT ymd;

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