try
{
conn.Open(); cmd_InstI = new SqlCommand("insert_infoPsn_1", conn);
cmd_InstI.CommandType = CommandType.StoredProcedure;
SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read())
{
cmd_InstI.Parameters.Add("@F2_2", "身份证");
cmd_InstI.Parameters.Add("@F3_3", dr[1].ToString());
cmd_InstI.Parameters.Add("@F4_4", dr[0].ToString());
cmd_InstI.Parameters.Add("@F5_5", "否");
cmd_InstI.Parameters.Add("@F6_6", "其他人员");
cmd_InstI.Parameters.Add("@F7_7", ""); cmd_InstI.ExecuteNonQuery();
cmd_InstI.Parameters.Clear(); }
dr.Close();
}
catch (Exception eI)
{
MessageBox.Show(eI.Message, "eI");
}
finally
{
conn.Close();
}上述代码想实现由一个表中读取数据,写到另一个表的指定列中(其他列补常数值),错误提示为"已有打开的与此命令相关联的 DataReader,必须首先将它关闭。" System.Exception {System.InvalidOperationException}问:是不是在cmd_InstI.ExecuteNonQuery();的执行过程中,与SqlDataReader的open()由什么关系? 如何解决?
{
conn.Open(); cmd_InstI = new SqlCommand("insert_infoPsn_1", conn);
cmd_InstI.CommandType = CommandType.StoredProcedure;
SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read())
{
cmd_InstI.Parameters.Add("@F2_2", "身份证");
cmd_InstI.Parameters.Add("@F3_3", dr[1].ToString());
cmd_InstI.Parameters.Add("@F4_4", dr[0].ToString());
cmd_InstI.Parameters.Add("@F5_5", "否");
cmd_InstI.Parameters.Add("@F6_6", "其他人员");
cmd_InstI.Parameters.Add("@F7_7", ""); cmd_InstI.ExecuteNonQuery();
cmd_InstI.Parameters.Clear(); }
dr.Close();
}
catch (Exception eI)
{
MessageBox.Show(eI.Message, "eI");
}
finally
{
conn.Close();
}上述代码想实现由一个表中读取数据,写到另一个表的指定列中(其他列补常数值),错误提示为"已有打开的与此命令相关联的 DataReader,必须首先将它关闭。" System.Exception {System.InvalidOperationException}问:是不是在cmd_InstI.ExecuteNonQuery();的执行过程中,与SqlDataReader的open()由什么关系? 如何解决?
解决方案 »
- 请问 怎么注册DevExpress.Localization.v8.2.dll 这个控件?
- form中子界面和父界面之间的问题
- 我装的是sql2000它却提示连接sql2005出错
- 如何把某一个Graphics对象的图像,复制到一个Bitmap的Graphics对象中
- Thread.Sleep(0)与Thread.Sleep(1)的区别
- winform组件问题
- 把C++的一个结构SimPhoneBookEntry转为C#的一个结构的问题。
- SaveFileDialog类的filter问题!
- 关于C#的注释的怪现象?
- 紧急!!多台机子同时访问数据库时出错(大约在大于70台时出错)!!!
- 关于打印的c#急急急急急
- 怎样得知线程池里的一个方法是否被正确执行?急~~~~
你也可以新建立一个连接,然后打开reader,之后关闭之.你的代码可能在什么地方已经打开了一个reader了,和ExecuteNonQuery没有关系
然后再 cmd_InstI.Parameters.Add("",list[1]); ArrayList list = new ArrayList();
while (dr.Read())
{
for(int i=0;i<dr.FieldCount ; i++)
{
list.Add(dr[i]);
}
}
dr.Close(); cmd_InstI.Parameters.Add("@F2_2", "身份证");
cmd_InstI.Parameters.Add("@F3_3", list[1].ToString());
cmd_InstI.Parameters.Add("@F4_4", list[0].ToString());
cmd_InstI.Parameters.Add("@F5_5", "否");
cmd_InstI.Parameters.Add("@F6_6", "其他人员");
cmd_InstI.Parameters.Add("@F7_7", ""); cmd_InstI.ExecuteNonQuery();
cmd_InstI.Parameters.Clear();
但 cmd_InstI.ExecuteNonQuery(); 是向数据库提交,虽说是不返回什么,但是却是有一个影响行数会返回的.你用同样一个对象在读的时候去操作数据库,那么DataReader就无法定位了.也不允许这样.
你再创建一个对象 SqlCommand对象来操作,要不你先放在本地的数据集里,即一个dataset或datatable中.循环这个table再去操作就是了.