DataRow dr = dt.Rows.Find(textBox1.Text); 提示输入字符串的格式不正确?

1个回答

  • 我看到问题晚了,近来有点事要忙,不好意思!

    正如一楼所说的,dt.Rows的类型是DataRowCollection,调用其中的find方法,但其中find与linq的使用方式是不同的,find可以接受object或object[]两种类型(事实上只能算是一种),但不管如果必须是包括主键,也就是说如果你使用的object的话必须是主键,如果是object[]的话,其中一个必须是主键!这个可以去查询msdn中的datarowcollection类的使用可以看到!

    至于三楼说的是就有点问题了,是object不错,但所有类型均继承自object的,也就是说如果其中是一个string,还是int还是一个自定义对象都没有问题的!

    但是也有不少的写法直接进行打包的,也就是在参数前边直接加(object)进行显式转换!但这种建你使用textBox1.Text.Trim()不要直接使用内容.但这种会不出现一常规例外,如果是你所使用表中没有说明主键(无主键表)也就是dt是无主键的情况下会例外MissingPrimaryKeyException,也就是没有主键的例外.这一步必须保证!

    第二步要处理的是如果取出的结果是null是,也就是说没有取出时结果不是一个空的datarow,而不是一个null!所以在使用时必须选进行测试:

    dr != null,可以用这句进行测试是否为空值!

    如果有时我们怕出错的情况下,我们可以使用

    datarow dr = dt.rows.find((object)textBox1.Text.trim());

    这样有利于理解与阅读!

    最后提醒一点就是,如果没有必须更改主键的情奖况下,dr的主键保持原来的值时可以不作修改!这里你的dr["Y_site_id"] = textBox1.Text.Trim()就是多余的!这里由于你的错误提示不是十分清楚,无法判断到底是哪种原因引起的,但其基本上来说,如果正常的写来的话,不应该有错的!