c#中sql语法错误

fantasykakaxi 2015-09-09 09:37:55
查询起始时间跟结束时间之间的记录 这样写 老报错

string str = "select * from Record where 1=1 ";
......
if (starttime.Value != "" && endtime.Value != "")
{
str += string.Format(" CreatTime > = CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%' 'and CompleteTime < = CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%''");//这句语法有问题
}

...全文
247 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 13 楼 starfd 的回复:
时间类型直接>= 和 <=之类的就行了,不需要like
是逻辑出问题了 帮我看看17楼吧
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 15 楼 Z65443344 的回复:
[quote=引用 11 楼 fantasykakaxi 的回复:] [quote=引用 9 楼 Z65443344 的回复:] 如果你发现时间不是时间类型,而是字符串,那么就应该从源头上把它改掉,而不是因为之前有个bug,所以后续代码都要将就这个bug来编程
。。。不是的 就是时间类型 一个到秒 一个到日 怕比较的时候 出错 就用convert转了[/quote] 想查一个时间段的,用between啊 外面精确到日,那么你把它转成时间型 DateTime 查询开始时间=DateTime.Parse(TextBox1.Text);//文本框里精确到日,所以转换后时分秒是0:0:0 DateTime 查询结束时间=查询开始时间.AddDays(1);//加上一天 SQL里这样写: string.Format(" and 时间 between '{0}' and '{1}'",查询开始时间,查询结束时间)[/quote] 我知道怎么错了 我把完整代码贴出来 if语句判断出错了

 if (DropDownList1.SelectedValue != "")
        {
            str += string.Format(" and UserID='" + DropDownList1.SelectedItem.Text + "'");
        }
        else if (starttime.Value != "")
        {
            str += string.Format(" and  CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%'");
        }
        else if (endtime.Value != "")
        {
            str += string.Format(" and CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%'");
        }
        else if (starttime.Value != "" && endtime.Value != "")
        {
            str += string.Format("and  CreatTime >= '" + starttime.Value + "'and CompleteTime <= '" + endtime.Value + "%'");
        }
前三个if执行都对 当执行第四个if的时候 断点之后 程序没有执行第四个if 执行的是第二个if +第三个if sql没问题了 逻辑出问题;额
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 16 楼 BenBenBears 的回复:
或许可能应该Maybe是逻辑出了点问题
正解 逻辑出问题了 楼上贴代码了 帮忙检查下
BenBenBears 2015-09-09
  • 打赏
  • 举报
回复
或许可能应该Maybe是逻辑出了点问题
於黾 2015-09-09
  • 打赏
  • 举报
回复
引用 11 楼 fantasykakaxi 的回复:
[quote=引用 9 楼 Z65443344 的回复:] 如果你发现时间不是时间类型,而是字符串,那么就应该从源头上把它改掉,而不是因为之前有个bug,所以后续代码都要将就这个bug来编程
。。。不是的 就是时间类型 一个到秒 一个到日 怕比较的时候 出错 就用convert转了[/quote] 想查一个时间段的,用between啊 外面精确到日,那么你把它转成时间型 DateTime 查询开始时间=DateTime.Parse(TextBox1.Text);//文本框里精确到日,所以转换后时分秒是0:0:0 DateTime 查询结束时间=查询开始时间.AddDays(1);//加上一天 SQL里这样写: string.Format(" and 时间 between '{0}' and '{1}'",查询开始时间,查询结束时间)
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 12 楼 lihui398 的回复:
1楼和2楼的正解
正在修改
  • 打赏
  • 举报
回复
时间类型直接>= 和 <=之类的就行了,不需要like
寂空冷 2015-09-09
  • 打赏
  • 举报
回复
1楼和2楼的正解
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 9 楼 Z65443344 的回复:
如果你发现时间不是时间类型,而是字符串,那么就应该从源头上把它改掉,而不是因为之前有个bug,所以后续代码都要将就这个bug来编程
。。。不是的 就是时间类型 一个到秒 一个到日 怕比较的时候 出错 就用convert转了
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
[quote=引用 6 楼 fantasykakaxi 的回复:] [quote=引用 3 楼 starfd 的回复:] CreatTime > = CONVERT(varchar(20),CreatTime,120) like 除了一楼错误外,这个也是错误,又是>=又是 like,这明显是错误的SQL
哦哦 应该怎么改 去掉like么 sql中存放的时间是带有时分秒的 输入的时间只有年月日 不用like不行啊[/quote] 还有,你数据库里的时间难道不是时间类型,而是个字符串吗? 这是严重的设计缺陷[/quote] 不是 不是 你理解错了 数据存的时间是精确到秒的 外面输入时间 是到日 我怕时间对不起来 就用了convert转换 给自己挖了坑 结果。。。。
於黾 2015-09-09
  • 打赏
  • 举报
回复
如果你发现时间不是时间类型,而是字符串,那么就应该从源头上把它改掉,而不是因为之前有个bug,所以后续代码都要将就这个bug来编程
於黾 2015-09-09
  • 打赏
  • 举报
回复
引用 6 楼 fantasykakaxi 的回复:
[quote=引用 3 楼 starfd 的回复:] CreatTime > = CONVERT(varchar(20),CreatTime,120) like 除了一楼错误外,这个也是错误,又是>=又是 like,这明显是错误的SQL
哦哦 应该怎么改 去掉like么 sql中存放的时间是带有时分秒的 输入的时间只有年月日 不用like不行啊[/quote] 还有,你数据库里的时间难道不是时间类型,而是个字符串吗? 这是严重的设计缺陷
於黾 2015-09-09
  • 打赏
  • 举报
回复
引用 5 楼 fantasykakaxi 的回复:
[quote=引用 2 楼 Z65443344 的回复:] 以后遇到类似这种问题,断点跟,把拼接出来的SQL语句放数据库里执行一下,不就什么都清楚了?
这句 有个获取输入的数据类型转换为sql中的时间类型 这个不能放到sql查询里吧 就果断 删除了这块 把其他放进去 没问题 加上这块就出问题了。[/quote] 你这代码到底是想干啥?又要>=,又要模糊匹配,完全是个自相矛盾的逻辑,而且语法也根本不对 在理清代码错误之前,你最好先理清自己的思路,把逻辑写成伪代码,先说服自己这是对的,再把它翻译成代码
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
CreatTime > = CONVERT(varchar(20),CreatTime,120) like 除了一楼错误外,这个也是错误,又是>=又是 like,这明显是错误的SQL
哦哦 应该怎么改 去掉like么 sql中存放的时间是带有时分秒的 输入的时间只有年月日 不用like不行啊
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
以后遇到类似这种问题,断点跟,把拼接出来的SQL语句放数据库里执行一下,不就什么都清楚了?
这句 有个获取输入的数据类型转换为sql中的时间类型 这个不能放到sql查询里吧 就果断 删除了这块 把其他放进去 没问题 加上这块就出问题了。
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
str += string.Format(" and CreatTime > = CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%' 'and CompleteTime < = CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%''");//这句语法有问题
加上and之后 like附近又出问题了 修改之后的

and CreatTime > = CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%' and CompleteTime < = CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%'
於黾 2015-09-09
  • 打赏
  • 举报
回复
以后遇到类似这种问题,断点跟,把拼接出来的SQL语句放数据库里执行一下,不就什么都清楚了?
  • 打赏
  • 举报
回复
CreatTime > = CONVERT(varchar(20),CreatTime,120) like 除了一楼错误外,这个也是错误,又是>=又是 like,这明显是错误的SQL
於黾 2015-09-09
  • 打赏
  • 举报
回复
str += string.Format(" and CreatTime > = CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%' 'and CompleteTime < = CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%''");//这句语法有问题
fantasykakaxi 2015-09-09
  • 打赏
  • 举报
回复
引用 20 楼 BenBenBears 的回复:
[quote=引用 18 楼 fantasykakaxi 的回复:] 正解 逻辑出问题了 楼上贴代码了 帮忙检查下
真要在源代码的基础上小改的话,试试这样:

       if (DropDownList1.SelectedValue != "")
        {
            str += string.Format(" and UserID='" + DropDownList1.SelectedItem.Text + "'");
        }
        //将ID独立开
        if (starttime.Value != "" && endtime.Value == "")
        {
            str += string.Format(" and  CONVERT(varchar(20),CreatTime,120) like '" + starttime.Value + "%'");
        }
        else if (endtime.Value != "" && starttime.Value==“”)
        {
            str += string.Format(" and CONVERT(varchar(20),CompleteTime,120) like'" + endtime.Value + "%'");
        }
        else if (starttime.Value != "" && endtime.Value != "")
        {
            str += string.Format("and  CreatTime >= '" + starttime.Value + "'and CompleteTime <= '" + endtime.Value + "%'");
        }
个人建议有DateTimePicker控件来设定查询时间,而不是TextBox,因为TextBox很难控制输入格式的。[/quote] 学习了 asp.net我用的是js那个插件 解决了 谢啦
加载更多回复(1)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧