2013-01-11 43 views
1

從字符串轉換DateTime時出現Conversion failed錯誤,有什麼幫助嗎?從字符串轉換datetime時轉換失敗ASP.NET

sqlcon.Open(); 
sqlcmd = new SqlCommand("select [Uzsak_Nr],[Preke],[Uzsak_Kiekis],[Gaut_Kiekis],[MyDate],[Gaut_Data] from emp where MyDate between '" + TextBoxData1 + "' and '" + TextBoxData2 + "' ", sqlcon); 
da = new SqlDataAdapter(sqlcmd); 
da.Fill(dt); 
GridViewRodyti.DataSource = dt; 
GridViewRodyti.DataBind(); 
sqlcon.Close(); 
+0

TextBoxData1和TextBoxData2變量的值是什麼?他們是字符串嗎? –

+0

不,我從調用控件中調用它 TextBoxData1.Text = CalendarRodyti.SelectedDate.ToString(「yyyy/MM/dd」); this.CalendarRodyti.Visible = false; – Erikas

+0

這很棒,但你最好展示填充這些變量的代碼。它很可能是TexBoxDataX變量是數據庫無法解析的日期格式。你在用什麼數據庫? –

回答

2

這一定SQL Injection寫了這一切......

使用參數化查詢例如

var sqlCmd = new SqlCommand("select [Uzsak_Nr],[Preke],[Uzsak_Kiekis],[Gaut_Kiekis],[MyDate],[Gaut_Data] from emp where MyDate between '@startDate' and '@endDate'", sqlcon); 
sqlCmd.Parameters.Add(new SqlParameter("@startDate", DateTime.Parse(TextBoxData1))); 
sqlCmd.Parameters.Add(new SqlParameter("@endDate", DateTime.Parse(TextBoxData2))); 

您的問題可能是由於無效的日期格式,如果使用SqlParameter並轉換成字符串爲DateTime應該照顧轉換的爲您服務。

+1

user1945561並不是要求如何讓他們的代碼更安全的建議 –

+1

@KevinBrydon也許不是,但我反正給*建議。它不僅會使他的代碼更安全,而且還會解決他的轉換問題。問題在於嘗試將日期傳遞給SQL,因爲由於潛在的本地化問題,字符串從來不是一個好主意。最好讓框架爲你做到這一點。 – James

+0

編譯錯誤 描述:在編譯爲請求提供服務所需的資源編譯期間發生錯誤。請查看以下具體的錯誤細節並適當修改您的源代碼。 編譯器錯誤消息:CS1026:)預計 – Erikas

0

我會建議你做這樣的......

sqlcon.Open(); 
DateTime date1; 
DateTime date2; 
DateTime.TryParse(TextBoxData1.Text, out date1); //is TextBoxData1 a TextBox? 
DateTime.TryParse(TextBoxData2.Text, out date2); 


if (date1 != null && date2 != null) {  
    sqlcmd = new SqlCommand(
     "select [Uzsak_Nr],[Preke],[Uzsak_Kiekis],[Gaut_Kiekis],[MyDate],[Gaut_Data] " + 
     "from emp where MyDate between @dt1 and @dt2 ", sqlcon); 
    sqlcmd.Parameters.AddWithValue("@dt1", date1); 
    sqlcmd.Parameters.AddWithValue("@dt2", date2); 
    da = new SqlDataAdapter(sqlcmd); 
    da.Fill(dt); 
    GridViewRodyti.DataSource = dt; 
    GridViewRodyti.DataBind(); 
    sqlcon.Close(); 
} 

使用參數化查詢是更漂亮和不運行注入的風險。

我假設你正在使用SQLServer。

+0

它的工作給我thnx很多 – Erikas

+0

@ user1945561沒有probs :) –

+0

@ user1945561如果答案已解決您的問題,請標記爲正確! –

相關問題