none
C#中无法在 System.String 和 System.Int32 上执行“=”操作 RRS feed

  • 问题

  • 各位老师好:

    我编了个小程序,想通过时间来查询某一天发生的事情,没想到会出现这种事情,我一下不知道怎么办了,请老师帮帮我,这是怎么回事?应该怎么解决?

     private void button5_Click(object sender, EventArgs e)
            {
                string iTime = dateTimePicker1.Value.ToString("yyyy-MM-dd").Trim();
                DataView dv = sqlDs.Tables["MaintRecord"].DefaultView;
                dv.RowFilter = "Time ="+iTime;
                 
                if(dv.Count>0)
    
                   {
                       dataGridView1.DataSource = dv;//自动选择行选择
                   
               
                dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
                  dataGridView1.Rows[0].Selected = true;   //默认选择第一行,光标定位
    
                      }
              
            }
    

     

    其中数据库中Time是vchar(10),运行结果是“System.String 和 System.Int32 上执行“=”操作”,请各位老师一定要教我,我急死了。
    秦臻
    2011年11月8日 14:21

答案

  • dv.RowFilter = "Time ="+iTime;
    改为
    dv.RowFilter = "Time ='"+iTime+"'";


    SD in China
    • 已标记为答案 秦臻 2011年11月10日 13:42
    2011年11月8日 21:25
  • 老师您好!

        非常感谢您的答复,确实管用。我只是有个小小的请求,我不知道这是为什么,授人以鱼不如授人以渔,老师能告诉我为什么这样就可以了吗?


    秦臻

    若要形成 RowFilter 值,请指定列的名称,后跟一个运算符和一个要筛选的值。该值必须用引号括起来。例如:

    "LastName = 'Smith'"


    我也有自己的签名档哦!
    • 已标记为答案 秦臻 2011年11月10日 13:43
    2011年11月9日 3:57
  • 老师您好!

        非常感谢您的答复,确实管用。我只是有个小小的请求,我不知道这是为什么,授人以鱼不如授人以渔,老师能告诉我为什么这样就可以了吗?


    秦臻


    秦臻:)

    很久没有见面了!(*^__^*) 嘻嘻

    这个原因很简单:因为你把Time字段定义成varchar,自然在RowFilter是字符串型string所以必须要加引号;就好比说你字符串比大小——

    只能是:
    if ("a"=="b")

    而不能是
    if(a==b)

    一样的道理。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年11月9日 7:33
    版主
  • Hi 秦臻,

    其实这个也可以在官方的文档中找到原因:

    下表中的第一列显示的是时间字符串文字,第二列显示的是日期或时间数据类型,第一列中的时间字符串文字将插入到第二列中与之对应的数据类型的数据库表列中。第三列显示的是将存储在对应数据库表列中的值。

    插入的字符串文字

    列数据类型

    存储在列中的值

    说明

    '12:12:12.1234567'

    time(7)

    12:12:12.1234567

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。

    '2007-05-07'

    date

    NULL

    任何时间值均将导致 INSERT 语句失败。

    '12:12:12'

    smalldatetime

    1900-01-01 12:12:00

    任何秒的小数部分精度值都将导致 INSERT 语句失败。

    '12:12:12.123'

    datetime

    1900-01-01 12:12:12.123

    任何长于三位的秒精度都将导致 INSERT 语句失败。

    '12:12:12.1234567'

    datetime2(7)

    1900-01-01 12:12:12.1234567

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。

    '12:12:12.1234567'

    datetimeoffset(7)

    1900-01-01 12:12:12.1234567 +00:00

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。


    其中第一列就是在SQL语句中日期时间具体值的写法.
    官方文档: http://msdn.microsoft.com/zh-cn/library/bb677243.aspx.

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 秦臻 2011年11月10日 13:46
    2011年11月10日 7:38
    版主

全部回复

  • dv.RowFilter = "Time ="+iTime;
    改为
    dv.RowFilter = "Time ='"+iTime+"'";


    SD in China
    • 已标记为答案 秦臻 2011年11月10日 13:42
    2011年11月8日 21:25
  • 老师您好!

        非常感谢您的答复,确实管用。我只是有个小小的请求,我不知道这是为什么,授人以鱼不如授人以渔,老师能告诉我为什么这样就可以了吗?


    秦臻
    2011年11月9日 2:06
  • 老师您好!

        非常感谢您的答复,确实管用。我只是有个小小的请求,我不知道这是为什么,授人以鱼不如授人以渔,老师能告诉我为什么这样就可以了吗?


    秦臻

    若要形成 RowFilter 值,请指定列的名称,后跟一个运算符和一个要筛选的值。该值必须用引号括起来。例如:

    "LastName = 'Smith'"


    我也有自己的签名档哦!
    • 已标记为答案 秦臻 2011年11月10日 13:43
    2011年11月9日 3:57
  • 老师您好!

        非常感谢您的答复,确实管用。我只是有个小小的请求,我不知道这是为什么,授人以鱼不如授人以渔,老师能告诉我为什么这样就可以了吗?


    秦臻


    秦臻:)

    很久没有见面了!(*^__^*) 嘻嘻

    这个原因很简单:因为你把Time字段定义成varchar,自然在RowFilter是字符串型string所以必须要加引号;就好比说你字符串比大小——

    只能是:
    if ("a"=="b")

    而不能是
    if(a==b)

    一样的道理。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2011年11月9日 7:33
    版主
  • Hi 秦臻,

    其实这个也可以在官方的文档中找到原因:

    下表中的第一列显示的是时间字符串文字,第二列显示的是日期或时间数据类型,第一列中的时间字符串文字将插入到第二列中与之对应的数据类型的数据库表列中。第三列显示的是将存储在对应数据库表列中的值。

    插入的字符串文字

    列数据类型

    存储在列中的值

    说明

    '12:12:12.1234567'

    time(7)

    12:12:12.1234567

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。

    '2007-05-07'

    date

    NULL

    任何时间值均将导致 INSERT 语句失败。

    '12:12:12'

    smalldatetime

    1900-01-01 12:12:00

    任何秒的小数部分精度值都将导致 INSERT 语句失败。

    '12:12:12.123'

    datetime

    1900-01-01 12:12:12.123

    任何长于三位的秒精度都将导致 INSERT 语句失败。

    '12:12:12.1234567'

    datetime2(7)

    1900-01-01 12:12:12.1234567

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。

    '12:12:12.1234567'

    datetimeoffset(7)

    1900-01-01 12:12:12.1234567 +00:00

    如果秒的小数部分精度超过为列指定的值,则字符串将被截断,且不会出错。


    其中第一列就是在SQL语句中日期时间具体值的写法.
    官方文档: http://msdn.microsoft.com/zh-cn/library/bb677243.aspx.

    祝你快乐每一天,
    Leo Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 秦臻 2011年11月10日 13:46
    2011年11月10日 7:38
    版主
  • 呵呵,好久没聆听你的教诲了。最近一直忙着找工作,项目都落下了。希望serviceboy以后多多关照哦
    秦臻
    2011年11月10日 14:36