编程论坛's Archiver

huanying205 发表于 2008-5-9 10:09

无法在 System.DateTime 和 System.String 上执行“Like”操作。

如题,我的意思是查询某月某日的记录,数据库里存的是日期格式,窗体界面上用monthCanlder1控件选择一个日期后,单击查询按钮 出现需要的数据,查询按钮代码如下:
            string strRowFilter = "";
            if (this.comboBox1.Text.Trim() != "")  
                strRowFilter += "登记日期 like '%" + comboBox1.Text.Trim() + "%' and ";
            if (strRowFilter != "")     
                strRowFilter = strRowFilter.Substring(0, strRowFilter.Length - 5);
            tempTable.DefaultView.RowFilter = strRowFilter;
点击按钮后即出现  无法在 System.DateTime 和 System.String 上执行“Like”操作。这个提示,怎么才能把ComboBox中的日期格式转换为字符串格式,完成查询,请大家指点一下,谢谢了!!

峥嵘子 发表于 2008-5-9 10:20

把like后面的单引号换成英文输入法的单引试一下?

huanying205 发表于 2008-5-9 10:27

确实是英文符号,我其它地方也用到过这段代码,不过那个就是字符串格式的,没有问题,还是日期格式跟字符串格式的转换问题。

峥嵘子 发表于 2008-5-9 10:28

不好意思。刚我也粘了一个帖,发现英文输入法的单引号粘到论坛里显示得像中文一样。所以刚才的建议无效。抱歉

峥嵘子 发表于 2008-5-9 10:30

看看这样行不行:
datetime  d1=convert.todatetime(comboBox1.Text.tostring());

huanying205 发表于 2008-5-9 10:43

你的意思就是ComBox控件里是字符串格式了?我觉得从日期控件里选出来的应该就是日期格式了吧,我感觉现在的问题应该是怎么把日期格式变化成字符串格式。

huanying205 发表于 2008-5-9 10:45

我刚才按照你的意思试了一下,出现的提示是:无法将类型“string”转换为“System.DateTime”

峥嵘子 发表于 2008-5-9 11:00

我昨天刚用了这个句子啊,应该没问题。我昨天的句子是这样写的:
DateTime leaveTime = Convert.ToDateTime((string)updateReader[0]);

是不是你的combobox中的格式不对?要写成"2003-01-01 18:20:01"或者某年某月某日的形式

峥嵘子 发表于 2008-5-9 11:01

日期转化成字符串是string s=date.ToString("yyyy-MM-dd HH:mm:ss");  date是你那个日期的实例
呵呵,我在线等我的帖答案,整半天全在你的帖子里灌水了,也不知道能不能帮上忙

huanying205 发表于 2008-5-9 11:14

呵呵,真的很感谢你的!
我的ComboBox里的日期不是我写上去的 而是从MonthCanlder1控件上选择出来的,都是这个格式2003-01-01 18:20:01的,

huanying205 发表于 2008-5-9 11:16

DateTime leaveTime = Convert.ToDateTime((string)updateReader[0]);这个格式是将字符串转换成日期格式的,我先试试你string s=date.ToString("yyyy-MM-dd HH:mm:ss");这个语句。

huanying205 发表于 2008-5-9 11:24

我就把date改成comboBox1了,不知道是不是这个意思,然后就说“ToString”方法采用“1”一个参数的重载,

峥嵘子 发表于 2008-5-9 14:18

应该是改成combobox.text吧?
不知道你的问题解决了没有?要不看看高手怎么说?
我刚刚跑到实验室问同学去了,但还是没有解决我的问题,郁闷~~~

snipen 发表于 2008-5-9 19:38

你可以DataTime.Parse(字符串).ToLocalDateString();不知道后面的单词有没有写错,,,呵呵

snipen 发表于 2008-5-9 19:43

不好意思,说错了,是DateTime time = DateTime.Now;
            this.textBox1.Text=time.ToShortDateString();这样可以显示出2008-5-9,不知道符不符合你的要求

huanying205 发表于 2008-5-10 08:45

textBox控件里显示的是日期格式,我觉得问题是出在我的查询代码里,那段代码好像查询的就是字符串之类的,而我输入的是日期格式,数据库里保存的也是日期格式,所以总是提示不能在字符串和日期格式之间操作,也就是无论我输入的是日期还是希字符串,数据库里的日期格式跟查询代码也还是字符串与日期格式,不能互通。这是我的理解。不知道查询日期格式的代码怎么写。

snipen 发表于 2008-5-10 10:46

那你就全部显示出来,拿到页面上操作,将日期输出字符串这样就好比较了,不同的就contine;相同的就留下,要不你就换个方法,干嘛非要用like 像between and 也不错

huanying205 发表于 2008-5-10 14:14

我决定把登记日期全换成字符串格式的,这样就简单多了!

ycdong2008 发表于 2008-5-10 16:47

直接将数据库读出来的时间转换成时间型的,原本数据库是时间型,读出来就成了字符型,看看下面这个对不:
strRowFilter += "登记日期 like '%" + to_date('"+comboBox1.Text.Trim()+"','yyyy-mm-dd hh24:mi:ss') + "%' and ";

huanying205 发表于 2008-5-12 10:57

我还没试行不行,不过上边的写法有错误,我改成这样了:strRowFilter += "登记日期 like '%" + to_date("+comboBox1.Text.Trim()+","yyyy-mm-dd hh24:mi:ss") + "%' and ";但是不管怎么写 总体是让生成to_date方法存根。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.