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

关于SqlCommand的用法?求解释。

string strHtml;
            SqlCmd.CommandText = "Select ID,UserName From [User] Order By ID";
            SqlCmd.Connection.Open();
            SqlDataReader SqlResult = SqlCmd.ExecuteReader();
            while (SqlResult.Read())
            {
                SqlCommand SqlUserCount=new SqlCommand();
                SqlUserCount.Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteData"].ToString());
                SqlUserCount.CommandText="Select Count(*) From QuestionRecord Where UserID="+SqlResult["ID"].ToString();
                SqlUserCount.Connection.Open();
                blUserCount.Items.Add(new ListItem(SqlResult["UserName"].ToString() +":"+ SqlUserCount.ExecuteScalar().ToString()));
                SqlUserCount.Connection.Close();
            }
            blUserCount.Visible = true;
            SqlCmd.CommandText = "SELECT ID, ProductTypeName FROM ProductType Order By ID";
            SqlDataReader SqlCount = SqlCmd.ExecuteReader();///There is already an open DataReader associated with this Command which must be closed first.
            while (SqlCount.Read())
            {
                SqlCommand SqlQuestionCount = new SqlCommand();
                SqlQuestionCount.Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteData"].ToString());
                SqlQuestionCount.Connection.Open();
                SqlQuestionCount.CommandText = "Select Count(*) from QuestionRecord Where ProductType=" + SqlCount["ID"].ToString() + "Order By ID";
                strHtml = "<dl><dt>" + SqlCount["ProductTypeName"].ToString() + SqlQuestionCount.ExecuteScalar() + "</dt>";
                SqlQuestionCount.CommandText = "SELECT ID, ProductType, Question FROM QuestionType Where ProductType=" + SqlCount["ID"].ToString() + "Order By ID";
                SqlDataReader SqlQuestCountResult=SqlQuestionCount.ExecuteReader();
                while(SqlQuestCountResult.Read())
                {
                    SqlCommand SqlQTC = new SqlCommand();
                    SqlQTC.Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteData"].ToString());
                    SqlQTC.CommandText = "Select Count(*) from QuestionRecord where QuestType=" + SqlQuestCountResult["ID"];
                    SqlQTC.Connection.Open();
                    strHtml = strHtml + "<dd>" + SqlQuestCountResult["Question"].ToString() + ":" + SqlQTC.ExecuteScalar()+"</dd>";
                    SqlQTC.Connection.Close();
                }
                strHtml += "</dl>";
                SqlQuestionCount.Connection.Close();
            }
            SqlCmd.Connection.Close();

上面的异常应该怎么处理??或者说是能这样用吗? --------------------编程问答-------------------- SqlResult.Close();//先关闭SqlResult --------------------编程问答-------------------- There is(有) already(已经) an open DataReader(一个打开的DataReader) associated with (同...关联)this Command(这个Command) which(代指Command) must be(必须) closed(关闭) first(首先).

要我教英语么? --------------------编程问答-------------------- 尽量别用SqlDataReader,用SqlDataAdapter --------------------编程问答-------------------- 直接用以前的SqlResult吧。再执行下。 --------------------编程问答-------------------- while (SqlCount.Read())
{
}
SqlCount.Close();//用完立马关闭。 --------------------编程问答-------------------- while (SqlResult.Read()) 。。你这已经打开了啊。 --------------------编程问答-------------------- 大部分是到微弱MSDN网站复制单词查看,当然也看别人写的,也看电子书,NET支持的数据提供 --------------------编程问答--------------------
在循环体内频繁打开和关闭连接,不如打开一次循环执行后关闭,比较不易出错.
过几天吧,更新一种可以循环执行的方法无论是一还是多,当然另一种使用OleDbCommandBuilder方法,稍后会发布.OleDbCommandBuilder和SqlCommandBuilder\SqlCommand和OleDbCommand在语法上都一样,只是引用不同.
--------------------编程问答-------------------- 追求速度,請用SqlDataReader,追求方便和穩定,請用SqlDataAdapter,樓主使用SqlDataRead不严谨,开了没关,造成错误,如果实在粗心,建议设置为全局变量,使用一个,但不建议这样做 --------------------编程问答-------------------- 版主好有爱啊 --------------------编程问答-------------------- SqlDataReader事务会滚的,觉得与数据库的量无关,就算是数据量小,有时频繁打开和关闭连接也会出错,看这个例子,打开和关闭都在循环体外 --------------------编程问答-------------------- 写错了 --------------------编程问答-------------------- 学习
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,