已有打开的与此命令相关联的 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