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

已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

RT,困扰我很久了。想将库存表的产品信息更新。
总是提醒我sdr2未关闭,关闭了就说读不到数据n、k、p、m、l的数据。求指教~!




        string n, p, k, m, l;
        string[] x = new string[100];
        int i = 0, j = 0;
        string sel, up;

        string sql = "select * from 库存表 ";
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(sql, conn);
        conn.Open();
        SqlDataReader sdr = cmd.ExecuteReader();
        while (sdr.Read())
        {
            x[i] = sdr[0].ToString();
            i++;
           
        }
        sdr.Close();

        sel = "select * from 产品表";
        SqlCommand cmd2;
        SqlDataReader sdr2;

        SqlCommand cmd3;
        SqlDataReader sdr3;

        for (j = 0; j <= i; j++)
        {
            cmd2 = new SqlCommand("select * from 产品表 where 产品编号=" + '\'' + x[j] + '\'', conn);
            sdr2 = cmd2.ExecuteReader();
            sdr2.Read();
            n = sdr2[1].ToString();
            p = sdr2[2].ToString();
            k = sdr2[3].ToString();
            m = sdr2[4].ToString();
            l = sdr2[5].ToString();
            //sdr2.Close();
            
            up = "update 库存表 set 名称=" + '\'' + n + '\'' + ",样图=" + '\'' + p + '\'' + ",类别=" + '\'' + k + '\'' + ",价格=" + '\'' + m + '\'' + ",下限=" + '\'' + l + '\'' + " where  产品编号=" + '\'' + x[j] + '\'';

            cmd3 = new SqlCommand(up, conn);
            sdr3 =cmd3.ExecuteReader();
            //sdr3.Close();
        }
        conn.Close();
SQL --------------------编程问答-------------------- 求指教啊  --------------------编程问答-------------------- 你为什么把那两行代码注释掉呢? --------------------编程问答-------------------- 不注释掉它会显示读不到数据n、k、p、m、l --------------------编程问答--------------------  using(SqlDataReader sdr = cmd.ExecuteReader()){
    ......
}
有SqlDataReader 的地方都要用using --------------------编程问答--------------------             SqlDataReader SqlDr = null;
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = this.conn;
            cmd.CommandText = strSQL;
            cmd.CommandType = CommandType.Text;
            using (SqlDr = cmd.ExecuteReader([color=#0000FF]CommandBehavior.CloseConnection))[/color]            {
                if (SqlDr.Read())
                {
                    if (SqlDr != null)
                        SqlDr.Close();
                    return true;
                }
                else
                {
                    if (SqlDr != null)
                        SqlDr.Close();
                    return false;
                }
            } --------------------编程问答-------------------- using CYQ.Data

using(MAction action=new MAction("表名"))
{} --------------------编程问答-------------------- DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。 

 //sdr2.Close();
 //sdr3.Close();
把这个注释去掉应该就可以了吧。

--------------------编程问答-------------------- SqlCommand也要释放。 --------------------编程问答-------------------- 试一试这样


for (j = 0; j <= i; j++)
        {
            using (SqlCommand cmd2 = new SqlCommand("select * from 产品表 where 产品编号=" + '\'' + x[j] + '\'', conn))
            {
                using (SqlDataReader sdr2 = cmd2.ExecuteReader())
                {
                    sdr2.Read();
                    n = sdr2[1].ToString();
                    p = sdr2[2].ToString();
                    k = sdr2[3].ToString();
                    m = sdr2[4].ToString();
                    l = sdr2[5].ToString();
                }
            
            up = "update 库存表 set 名称=" + '\'' + n + '\'' + ",样图=" + '\'' + p + '\'' + ",类别=" + '\'' + k + '\'' + ",价格=" + '\'' + m + '\'' + ",下限=" + '\'' + l + '\'' + " where  产品编号=" + '\'' + x[j] + '\'';

            using (SqlCommand cmd3 = new SqlCommand(up, conn))
            {
                using (SqlDataReader sdr3 =cmd3.ExecuteReader())
                {  do something; }
            }
        }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,