作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/24 14:09:12
DataRow dr = dt.Rows.Find(textBox1.Text); 提示输入字符串的格式不正确?
private void button1_Click(object sender,EventArgs e)
{
DataTable dt = ds.Tables["cs"];
sda.FillSchema(dt,SchemaType.Mapped);
DataRow dr = dt.Rows.Find(textBox1.Text);
dr["Y_site_id"] = textBox1.Text.Trim();
dr["Y_site_name"] = textBox2.Text.Trim();
dr["Y_site_location"] = textBox3.Text.Trim();
dr["Y_site_buildtime"] = textBox4.Text.Trim();
SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(sda);
sda.Update(dt);
}
我看到问题晚了,近来有点事要忙,不好意思!
正如一楼所说的,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()就是多余的!这里由于你的错误提示不是十分清楚,无法判断到底是哪种原因引起的,但其基本上来说,如果正常的写来的话,不应该有错的!