学习ADO.NET遇到一个问题不懂请救高手

学了一些简单的通过ADO.NET来插入数据,删除数据,修改数据,但是在查询数据时遇到问题了。用SqlCommand来查询只能查到一个数,用SqlDataReader配上循... 学了一些简单的通过ADO.NET来插入数据,删除数据,修改数据,但是在查询数据时遇到问题了。

用SqlCommand来查询只能查到一个数,用SqlDataReader配上循环等能一下查多少数据,但是SqlDataAdapter的时候我就有点迷糊了,暂时我的理解是前两个方法都是直接从数据库里面取数据的,而SqlDataAdapter冒适是把数据取出来存在程序里的。不知道是否正确,

下面付上代码请大家帮分析一下。

SqlConnection con = new SqlConnection(“连接字符串”);
string s = "select * from Table_1";
SqlDataAdapter da = new SqlDataAdapter(s, con);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
Console.WriteLine(dr[0].ToString() + "__" + dr[1].ToString());
}
我的理解是
SqlDataAdapter的第一个参数相当于告诉程序要去数据库做什么事,第二个参数是去那个数据库。

DataSet 这个对象在说明中看着是用来存临时的缓存数据,da.Fill(ds); 把这个临时的东西整理的放好。

da.Fill(ds); 这个就是关键了,不懂这个方法具体用途,说明说是给DataSet刷新行,对这样理解吗,DataSet的数据是临时缓存的,用这个方法就是讲数据整齐的排列成一行一行是吗。

DataTable dt = ds.Tables[0]; 这句话是否就是创建一个专门存表的对象,象缓存区的数据存在特定的一张表上面,这里的0下标说是第一张表,我试着用1下标异常,不理解这个下标的具体含义 这时的dt变量应该就是一张具体的表了吧。

fro循环中首先是条件不能小于这张表中的行数,然后在里面又声明一个对象用来存每一行的数据,然后打印出每一行中的,两列数据。da.Fill(ds) 把取回来的

我不理解的是da.Fill(ds)这个方法,上面的理解是我通过说明猜的。然后 DataTable dt = ds.Tables[0];这个应该就是将临时存放的数据放到具体的表中去,但是这个下标的意思我不懂。说是第一张表。那什么情况下会有第二张表呢。
展开
 我来答
handangaoyang
2013-12-03 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:901万
展开全部

首先,你的理解基本都是对的。


  1. DataSet 你把他理解成一个本地虚拟的数据库。

  2. da.Fill(ds),就是把你的查询语句,得到的结果,填充到这个虚拟数据库中。你的查询语句是一个select语句,那么就是一个返回一张表。所以ds.Tables[0]只有0的索引,没有1的索引。

    什么情况下会有1的所有,或者会有n(n>0)索引

    如果你的语句,用了多个select语句,返回结果。

    例如:把你的sql语句修改成“select * from Table_1;select * from Table_1;”,这样就返回了2个结果。这样就会有ds.Tables[1]的结果

  3. 当然,一般情况下,这种返回多个结果的情况,是在存储过程中实现的。我这里只是一个简单的实例。真正开发不会这样搞。因为如果要一次返回过个结果,一定要把语句都放在一个存储过程中。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式