我收到此错误:
'datetime'附近的语法不正确。
运行我的代码时:
private static string connectionString = "Data Source=1.1.1.1;Initial Catalog=rs;User Id=rs;Password=rs";
public static List<Cal> getEvents(DateTime start, DateTime end)
{
List<CalendarEvent> events = new List<CalendarEvent>();
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT [ID], [Name], [Room], [Time-in], [Time-out] FROM [rs].[dbo].[res_time] WHERE [Time-in]>=[@Time-in] AND [Time-out]<=[@Time-out]", con);
cmd.Parameters.AddWithValue("[@Time-in]", start);
cmd.Parameters.AddWithValue("[@Time-out]", end);
using (con)
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
CalendarEvent ce = new CalendarEvent();
ce.id = (int)reader["id"];
ce.title = (string)reader["Name"];
ce.description = (string)reader["Room"];
ce.start = (DateTime)reader["Time-in"];
ce.end = (DateTime)reader["Time-out"];
events.Add(cevent);
}
}
return events;
}
答案 0 :(得分:0)
AddWithValue()
方法可能会对日期和时间造成问题。使用
cmd.Parameters.Add("[@Time-in]", SqlDbType.DateTime).Value = start;
cmd.Parameters.Add("[@Time-out]", SqlDbType.DateTime).Value = end;
您可以阅读此article以获取有关AddWithValue()
方法限制的更多信息。它的要点是,因为它必须推断出正确的数据类型,所以它有时会出错。对于日期和时间尤其如此。
使用Add()
方法的此重载指定在表上创建列时声明的确切数据类型,有助于确保解析正确的类型。
答案 1 :(得分:-1)
首先,您是要尝试返回List<Cal>
还是List<CalenderEvent>
?
要回答您的问题,您需要在Visual Studio中手动解析它
ce.start = Convert.ToDateTime(reader["Time-in"]).ToString();
这假设您的列数据的格式正确,以便转换生效。
<强>更新强>
好的,我搞砸了我的.ToString()
试试这个:
// I moved the .ToString() inside the Convert function
ce.start = Convert.ToDateTime(reader["Time-in"].ToString());
你得到了隐式转换错误,因为它在解析后应用了.ToString(),这意味着你正在尝试将字符串值放入DateTime变量中。我的坏!