当前位置:编程学习 > C#/ASP.NET >>

关于datareader和dataadapter的具体问题

程序功能:读数据表里某个字段为UnBack的数据,针对每一行数据,调用函数,将另一个字段的值发给对方,调用后将该字段值UnBack更新为BackSuccess,
想法有两个
1 通过datareader读数据,在read中循环调用函数,然后再执行更新的sqlcmd

2通过dataadapter,将表填充到dataset的table中,建立循环调用函数,然后用adaper.update更新

代码如下
 try
                    {
                        SqlConnection RecordTableconn = new SqlConnection(@"Data Source=.\SQLExpress;Integrated Security=True;Database=RecordDataBase");
                        RecordTableconn.Open();//打开连接
                        string sql = "SELECT * FROM RecordTable WHERE BackRecord = '" + bdReturn.Ub + "' or BackRecord = '" + bdReturn.Bf + "'";//定义sql语句字符串:选择记录表中字段RecordStatus为Savesuccess的数据
                        //SqlDataAdapter recordAdapter = new SqlDataAdapter(sql, RecordTableconn);//建立DataAdapter
                        //DataSet recordDataset = new DataSet();//建立DataSet
                        //recordAdapter.Fill(recordDataset, "table");//adapter选中的数据填充到recordDataset中的table中
                        //int i = 0;
                        //for (i = 0; i < recordDataset.Tables["table"].Rows.Count; i++)
                        //{
                        //    IPAddress ip = IPAddress.Parse(recordDataset.Tables["table"].Rows[i]["IPSource"].ToString());
                        //    int port = (int)recordDataset.Tables["table"].Rows[i]["port"];
                        //    int id = -(int)recordDataset.Tables["table"].Rows[i]["SendId"];
                        //    backConnect(ip, port, id);//调用函数backConnect
                        //    recordDataset.Tables["table"].Rows[i]["BackRecord"] = bdReturn.Bs;
                        //    recordDataset.Tables["table"].Rows[i]["BackTime"] = DateTime.Now;
                        //    recordAdapter.Update(recordDataset, "table");
                        //}
                        
                        //RecordTableconn.Close();//关闭数据库连接
                        SqlCommand cmd = new SqlCommand(sql, RecordTableconn);//建立cmd
                        SqlDataReader recordReader = cmd.ExecuteReader();//建立dataReader
                        if (recordReader.HasRows)//reader中有数据
                        {
                          while (recordReader.Read())//循环读取
                        {
                          IPAddress ip = IPAddress.Parse(recordReader["IPSource"].ToString());
                               int port = (int)recordReader["Port"];
                               int id = -(int)recordReader["SendId"];
                               backConnect(ip, port, id);//调用函数dbOperation
                               recordReader.Close();//关闭dataReader
                               string sqlupdate = "UPDATE RecordTable SET BackTime ='" + DateTime.Now.ToString() + "' ,BackRecord='" + bdReturn.Bs + "'";
                               SqlCommand cmdupdate = new SqlCommand(sqlupdate, RecordTableconn);
                               cmdupdate.ExecuteNonQuery();
                           }
                        }
                        //recordReader.Close();//关闭dataReader
                        RecordTableconn.Close();//关闭数据库连接

                        formReturn.listboxReturn.Items.Add("返回成功!");
                        formReturn.listboxReturn.TopIndex = formReturn.listboxReturn.Items.Count - 1;//顶端显示最后一行
                    }

                    catch
                    {
                        formReturn.listboxReturn.Items.Add("返回失败!");
                        formReturn.listboxReturn.TopIndex = formReturn.listboxReturn.Items.Count - 1;//顶端显示最后一行
                        Thread.Sleep(10000);
                    }


其中被标记为注释的部分 为dataadapter方法,但是试验时提示 更新方法不对
未标记的那段 为datareader 试验时在执行更新的sqlcmd时 提示reader要关闭 ,但是关闭reader后还是有问题
问:使用哪种方法更合理?怎么修改来解决上述问题。
ps:还有更好的办法吗?这两个是我自己想的。 datareader adapter SQL --------------------编程问答-------------------- 尽量用dataadapter而不是datareader。dataadapter是离线的,datareader是在线的。 --------------------编程问答-------------------- 用sqlcommandbuilder填充dataadapter
你單步到dataadapter的update方法時能看到他所包含的sql命令,裏面的updatecommand應該是空的吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,