2015-09-20 62 views
-1

我想在c#中用文本框过滤记录sql数据库库的时间,但我得到了“该对象必须实现iconvertible”,我不知道为什么 有没有人可以帮我解决这个错误?如何解决c#对象必须实现iconvertible错误?

cmd.Parameters.Add(new SqlParameter("@Date1", SqlDbType.DateTime)).Value = txtstartingdate; 
cmd.Parameters.Add(new SqlParameter("@Date2", SqlDbType.DateTime)).Value = txtendingdate; 
using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
     DataTable dt = new DataTable(); 
     dt.Load(dr); 
     gdvRfids.DataSource = dt; 
} 
+0

总是发布确切的错误消息,包括发生在哪条线上的信息。 –

+0

错误出现在行.........使用(sqldatareader dr = cmd.executereader()) –

+0

最有可能是因为你说“这是一个DateTime”,然后给它一个字符串的值,而不是DateTime。你必须转换它。 –

回答

0

尝试转换txtstartingdatetxtendingdateDateTime值;

OR

如果你很高兴与SQL服务器将文本转换为日期时间,然后 只是做

cmd.Parameters.AddWithValue("@Date1", txtstartingdate); 
cmd.Parameters.AddWithValue("@Date2", txtendingdate); 
using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
    DataTable dt = new DataTable(); 
    dt.Load(dr); 
    gdvRfids.DataSource = dt; 
}  

UPDATE

我想我看到了问题。我假设txtstartingdatestring。我打赌它的TextBox或其他控制。如果一个TextBox只是.Text属性。

cmd.Parameters.AddWithValue("@Date1", txtstartingdate.Text); 
cmd.Parameters.AddWithValue("@Date2", txtendingdate.Text); 
using (SqlDataReader dr = cmd.ExecuteReader()) 
{ 
    DataTable dt = new DataTable(); 
    dt.Load(dr); 
    gdvRfids.DataSource = dt; 
}  
+0

这是不好的做法,原因有两个:你不应该乐意让服务器进行转换,不应该使用'AddWithValue',因为有更好的方法。就像OP目前使用的那个一样。 –

+0

@SamiKuhmonen,我同意第一点,但我只是让OP的生活更轻松。第二点是值得商榷的。 –

+0

感谢理查德,但我怎样才能将txtstartingdate和endingdate转换为datetime? –

相关问题