请教一下,我想实现从一个数据表里,读取所需的数据,到另一个新数据表里面,代码如下,但有报错,请指导一下是什么原因;
private void btntran_Click(object sender, EventArgs e)
{
try
{
using (SqlConnection conn = new SqlConnection("server=192.168.100.247;database=WHMesInfo;user=sa;password=whyy@2021"))
{
conn.Open();
// 读取数据表的部分字段值
string sql = "SELECT * FROM w_prohourcount";
using (SqlCommand command = new SqlCommand(sql, conn))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// 获取读取到的字段值
//DateTime inputdate = dateTimePicker1.Value.Date;
string inputdate = "date";
string inputbatchNo = "batchNo";
string inputprobatchNo = "probatchNo";
// 插入到新数据表的对应字段值
string insertSql = @"INSERT INTO [dbo].[w_protran]([date],[batchNo],[probatchNo])
VALUES (@date, @batchNo, @probatchNo)";
using (SqlCommand insertCommand = new SqlCommand(insertSql, conn))
{
insertCommand.Parameters.AddWithValue("@date", inputdate);
insertCommand.Parameters.AddWithValue("@batchNo", inputbatchNo);
insertCommand.Parameters.AddWithValue("@probatchNo", inputprobatchNo);
insertCommand.ExecuteNonQuery();
MessageBox.Show("插入成功");
}
}
}
}
conn.Close();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
提示已经很清楚了,SqlDataReader 没有关闭,再用ExecuteNonQuery就会出错。
看你上面的代码用一条语句就可以处理了:insert into …… select…… from……
如果想在SqlDataReader 没有执行Close之前时使用新的sql语句,需要新的SqlConnection实例 和 新的SqlCommand 实例,不然就会弹你那个错误
【以下回答由 GPT 生成】
根据提供的代码,给出以下检查的建议和解决方案:
确保数据库连接字符串正确:
检查数据表的结构和字段名:
w_prohourcount
表和 w_protran
表存在,并且字段名和代码中一致。w_protran
表中的字段与插入语句中的字段一致。确保数据库连接有效:
检查权限问题:
检查输入参数值的来源:
inputdate
、inputbatchNo
和 inputprobatchNo
的方式。确保它们的来源和赋值方式正确。检查其他异常:
如果以上建议没有解决报错问题,可能需要提供更详细的报错信息和相关环境信息来进行深入分析和排查。我无法提供具体的解决方案,请尝试以上建议进行排查。
【相关推荐】