运行时错误'已经有一个与此命令关联的打开的datareader,必须先关闭'
objCommand = new SqlCommand("SELECT field1, field2 FROM sourcetable", objConn);
objDataReader = objCommand.ExecuteReader();
while (objDataReader.Read())
{
objInsertCommand = new SqlCommand("INSERT INTO tablename (field1, field2) VALUES (3, '" + objDataReader[0] + "')", objConn);
objInsertCommand.ExecuteNonQuery();//Here is the error
}
objDataReader.Close();
Run Code Online (Sandbox Code Playgroud)
我不能在这里定义任何存储过程.任何帮助我们都会感激.
小智 80
不需要做所有这些,只需打开MARS,您的问题就会得到解决.在您的连接字符串中添加MultipleActiveResultSets=True;
当它仍然在读取数据读取器的内容时,您无法对该连接执行操作 - 该错误非常具有描述性.
您的替代方案是:
1)首先使用DataSet检索所有数据,或者使用阅读器填充其他一些集合,然后在初始选择完成后立即运行所有数据.
2)为insert语句使用不同的连接.
如何通过Fill将数据拉入DataSet,然后遍历它以通过NonQuery执行插入?
IDbDataAdapter da;
IDbCommand selectCommand = connection.CreateCommand();
selectCommand.CommandType = CommandType.Text;
selectCommand.CommandText = "SELECT field1, field2 FROM sourcetable";
connection.Open();
DataSet selectResults= new DataSet();
da.Fill(selectResults); // get dataset
selectCommand.Dispose();
IDbCommand insertCommand;
foreach(DataRow row in selectResults.Tables[0].Rows)
{
insertCommand = connection.CreateCommand();
insertCommand.CommandType = CommandType.Text;
insertCommand.CommandText = "INSERT INTO tablename (field1, field2) VALUES (3, '" + row["columnName"].ToString() + "'";
}
insertCommand.Dispose();
connection.Close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75025 次 |
| 最近记录: |