关于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#