C# 中 DataSet 赋值问题 速急!!!!!

---------------------------------------------表Lessonidnamesexagetype1张三111812张三222323... ---------------------------------------------
表 Lesson
id name sex age type
1 张三1 1 18 1
2 张三2 2 23 2
3 张三3 1 16 1
4 张三4 2 18 3
5 张三5 1 25 3
6 张三6 1 18 2
---------------------------------------------
问题: 我从数据库中查询到数据集DataSet
DataSet ds = DbHelperSQL.Query("Select * from Lesson") ;
需要给ds中的常量 重新赋值 数据类型错误
for (int i = 0; i < ds.Tables[0].Rows.Count;i++ )
{
string val= ds.Tables[0].Rows[i]["type"].ToString();
if(val==“1”){
ds.Tables[0].Rows[i]["type"] = “优等生”;
}else if(val==“2”){
ds.Tables[0].Rows[i]["type"] = “中等生”;
}else if(val==”3“){
ds.Tables[0].Rows[i]["type"] = “下等生”;
}
}
此处报错:输入字符串的格式不正确。不能在 type列中存储 <优等生>。所需类型是 Int32。

为什么会报错呀,主要是如何解决 赋值不上 。。。 ?在线等
展开
 我来答
百度网友66a8d48e5
2013-05-04 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3888万
展开全部
因为原来的值为int32的,所以赋值时还必须是int32的。

可以考虑增加一列string类型的,将string存在该列中。

不过建议由SQL语句完成
select * from Lesson
改为:
select *, strType= (case type when 1 then "优等生" when 2 then "中等生" else "下等生" end) from Lesson

执行完这句时,你可以在ds.table[0]中找到strType列。且已自动转换,没有必须要使用以上的循环语句!
追问
我想用过 循环来操作,请问能通过在Table[0]中找到"type"列,并改变这列的数据类型,来实现赋值吗?
主要怎么写
追答
只能添加一个新列,或者在绑定事件中处理。

一般优先考虑数据库处理。如果性能上下降太多的情况下,可以考虑使用绑定事件。一般绑定事件处理较为复杂的转换。一般的转换使用数据库即可。

一般只有本地内存表才会使用dataset中进行转换,还有一种特殊情况就是虽然修改不复杂,但是由于对数据性下降较为厉害的情况下,可以考虑dataset进行转换。

但类型的转换一般是在数据库中完成,非要在dataset中完成,你必须添加一个列。

方法是:你先定定义一个string的列,然后增加到dataset.table[0]上,然后再给这个列赋值。

你现在的情况下,你将一个数字转换为字符中直接结数据值列进行赋值虽然是错误的。
sxn10050812
2013-05-04 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:122万
展开全部
你明明定义表结构时就是定义的type是Int类型的,这里又怎么能存储字符串呢?

结构已经定义过了列的数据类型就不能修改了,必须在定义表的时候把类型确定。你可以把Lesson表的type列的类型直接改为varchar类型,这样本来的1 2 3...也可以存储,之后的字符串也可以存储,两不误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式