You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用While循环向数据库写入递增价格失败,寻求技术帮助

排查你的循环写入数据库失效问题

我来帮你梳理下这段代码里的几个关键问题,正是它们导致了循环写入功能异常:

  • 循环内的Console.ReadKey()阻塞了流程:每次插入一条数据后,程序会卡在这一步等待你按下按键才会继续下一次循环,你可能误以为程序没运行,但其实它只是在等待输入。
  • 空catch块吞掉了所有异常:不管是SQL语法错误、数据库连接失败还是其他问题,你都看不到任何错误提示,完全没法定位问题根源。
  • 字符串拼接SQL存在语法风险:double类型的Add转字符串时,可能因为系统区域设置(比如用逗号代替小数点)导致SQL语句语法错误,而且这种写法还存在SQL注入隐患。
  • 未正确管理数据库连接:每次循环都新建SqlConnection,却没有确保连接被关闭,容易造成连接池耗尽,后续操作无法执行。

修正后的代码

namespace Testing
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = @".........."; // 替换为你的实际连接字符串
            string buyable = "0"; // 如果Buyable是整数类型,建议直接用int类型
            int count = 10;
            double currentPrice = 0.00000000;
            const double priceIncrement = 0.00000005;

            // 使用using语句自动管理连接资源,确保连接被正确关闭
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                try
                {
                    con.Open();
                    Console.WriteLine("Database connected");

                    // 提前定义SQL语句,使用参数化查询避免语法错误和注入风险
                    string query = "INSERT INTO [dbo].[Table] ([Price], [Buyable]) VALUES (@Price, @Buyable)";
                    using (SqlCommand ins = new SqlCommand(query, con))
                    {
                        // 根据你的表结构调整参数类型(比如Price如果是decimal就用SqlDbType.Decimal)
                        ins.Parameters.Add("@Price", SqlDbType.Float);
                        ins.Parameters.Add("@Buyable", SqlDbType.VarChar);

                        for (int i = 0; i < count; i++)
                        {
                            currentPrice += priceIncrement;
                            // 循环更新参数值,复用命令对象提升性能
                            ins.Parameters["@Price"].Value = currentPrice;
                            ins.Parameters["@Buyable"].Value = buyable;

                            int rowsAffected = ins.ExecuteNonQuery();
                            Console.WriteLine($"第{i+1}条数据存储成功,影响行数:{rowsAffected}");
                        }
                    }
                }
                catch (SqlException ex)
                {
                    // 输出SQL相关错误信息,方便调试
                    Console.WriteLine($"数据库操作错误:{ex.Message}");
                }
                catch (Exception ex)
                {
                    // 捕获其他类型的异常
                    Console.WriteLine($"程序错误:{ex.Message}");
                }

                Console.WriteLine("所有操作完成,按任意键退出...");
                Console.ReadKey();
            }
        }
    }
}

关键修改说明

  1. using语句管理资源:自动处理连接和命令对象的释放,避免资源泄漏。
  2. 参数化查询:彻底解决字符串拼接带来的格式问题和安全风险,确保数值类型正确传递给数据库。
  3. 移除循环内的Console.ReadKey():让循环自动执行完所有插入操作,最后再统一等待按键退出。
  4. 添加异常信息输出:出问题时能直接看到错误原因,快速定位问题。
  5. 复用SqlCommand对象:不用每次循环都新建命令,提升程序性能。

内容的提问来源于stack exchange,提问作者Kabundscha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:43