我有这个查询字符串,说明如下。
SqlComm.CommandText = "SELECT * FROM MyDataTable WHERE (DataDate LIKE @SDataDate)";
SqlComm.Parameters.AddWithValue("@SDataDate", dtpSrcDataDate.Value.ToString());
SqlComm.CommandText = "SELECT * FROM MyDataTable WHERE DataDate LIKE" +
dtpSrcDataDate.Value;
以上两个陈述无效。
当我尝试第一个语句时,datagridview显示一个空语句。
当我尝试第二个语句时,会出现一条错误消息:
在预期条件的上下文中指定的非布尔类型的表达式,在'LIKE7'附近
我无法弄清楚这个问题。
请帮忙。
答案 0 :(得分:3)
您正在使用LIKE statement on a DateTime column,这没有多大意义,但是,无论如何,当使用DateTime时,您使用AddWithValue将字符串作为值传递
googleMap.addMarker(new MarkerOptions()
.position(BROOKLYN_BRIDGE)
.title("First Pit Stop")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
第二个语句是另一个问题,因为LIKE和值之间没有空格,但同样,DateTimePicker.Value会通过连接自动转换为字符串,然后此字符串不能用于搜索DateTime列
换句话说,始终使用与您要搜索的列类型匹配的正确数据类型的参数。 Better also avoid completely AddWithValue并使用
SqlComm.CommandText = "SELECT * FROM MyDataTable WHERE DataDate = @SDataDate";
SqlComm.Parameters.AddWithValue("@SDataDate",dtpSrcDataDate.Value);
以这种方式搜索会带来另一个问题。如果您的数据库列还包含Time部分,那么您不能仅使用=运算符进行搜索,因为您永远不会找到匹配项。
例如,DateTimePicker.Value为“23/07/2017 00:00:00”,而搜索记录为“23/01/2017 09:35:00”
在这种情况下,您需要两个参数。一个表示搜索的最小值,另一个表示搜索的最大值
因此,如果您搜索特定日期的所有记录,则需要这样的代码
SqlComm.Parameters.Add("@SDataDate", SqlDbType.Date).Value = dtpSrcDataDate.Value;