从一个数据表里,读取所需的数据,到另一个新数据表里面,有报错;

请教一下,我想实现从一个数据表里,读取所需的数据,到另一个新数据表里面,代码如下,但有报错,请指导一下是什么原因;

img

 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 生成】

根据提供的代码,给出以下检查的建议和解决方案:

  1. 确保数据库连接字符串正确:

    • 检查数据库服务器的 IP 地址、数据库名、用户名和密码是否正确。
    • 确保服务器的连接端口号正确。
  2. 检查数据表的结构和字段名:

    • 确保 w_prohourcount 表和 w_protran 表存在,并且字段名和代码中一致。
    • 确保 w_protran 表中的字段与插入语句中的字段一致。
  3. 确保数据库连接有效:

    • 确保数据库服务器可用和能够访问。
    • 检查数据库服务器的防火墙设置,以确保允许来自应用程序的连接。
  4. 检查权限问题:

    • 确保连接数据库的用户具有足够的权限进行读取和写入操作。
    • 检查数据库表的权限设置,确保用户可以对表进行插入操作。
  5. 检查输入参数值的来源:

    • 检查代码中获取 inputdateinputbatchNoinputprobatchNo 的方式。确保它们的来源和赋值方式正确。
  6. 检查其他异常:

    • 将捕获到的异常信息输出到控制台可能不是很有用,建议使用更合适的日志记录方式,例如 log4j 等工具,以便更好地调试和定位问题。

如果以上建议没有解决报错问题,可能需要提供更详细的报错信息和相关环境信息来进行深入分析和排查。我无法提供具体的解决方案,请尝试以上建议进行排查。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^