C# SQL插入奇怪地跳过第一条记录

C# SQL插入奇怪地跳过第一条记录,c#,sql,sql-server,insert,C#,Sql,Sql Server,Insert,我从另一个类获取一个对象列表,并在插入查询中使用它 不知何故,我得到了一个奇怪的错误,因为列表中的第一个对象没有插入 如果有人能发现我的错误,我会非常高兴的!我的头撞在键盘上已经有一段时间了 var ActNoParam = new SqlParameter(); ActNoParam.ParameterName = "@ActNo"; ActNoParam.SqlDbType = SqlDbType.Int; cmd.Parame

我从另一个类获取一个对象列表,并在插入查询中使用它

不知何故,我得到了一个奇怪的错误,因为列表中的第一个对象没有插入

如果有人能发现我的错误,我会非常高兴的!我的头撞在键盘上已经有一段时间了

        var ActNoParam = new SqlParameter();
        ActNoParam.ParameterName = "@ActNo";
        ActNoParam.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(ActNoParam);

        var CustNoParam = new SqlParameter();
        CustNoParam.ParameterName = "@CustNo";
        CustNoParam.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(CustNoParam);

        var DelpriParam = new SqlParameter();
        DelpriParam.ParameterName = "@DelPri";
        DelpriParam.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(DelpriParam);

        var CustPrg3Param = new SqlParameter();
        CustPrg3Param.ParameterName = "@CustPrg3";
        CustPrg3Param.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(CustPrg3Param);

        var NmParam = new SqlParameter();
        NmParam.ParameterName = "@Nm";
        NmParam.SqlDbType = SqlDbType.VarChar;
        cmd.Parameters.Add(NmParam);

        var Gr6Param = new SqlParameter();
        Gr6Param.ParameterName = "@Gr6";
        Gr6Param.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(Gr6Param);

        var CreUsrParam = new SqlParameter();
        CreUsrParam.ParameterName = "@CreUsr";
        CreUsrParam.SqlDbType = SqlDbType.VarChar;
        cmd.Parameters.Add(CreUsrParam);

        var CreDtParam = new SqlParameter();
        CreDtParam.ParameterName = "@CreDt";
        CreDtParam.SqlDbType = SqlDbType.Int;
        cmd.Parameters.Add(CreDtParam);

        for (int i = 1; i < customers.Count; i++)
        {
            cmd.CommandText =
            @"IF NOT EXISTS (SELECT 1 FROM dbo.Actor WHERE DelPri = @DelPri AND CustPrg3 = @CustPrg3) 
                     INSERT INTO dbo.Actor(ActNo, CustNo, DelPri, CustPrg3, Nm, Gr6, CreDt, CreUsr) 
                     VALUES(@ActNo, @CustNo, @DelPri, @CustPrg3, @Nm, @Gr6, @CreDt, @CreUsr);";


            ActNoParam.Value = customers[i].ActNo; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 
            CustNoParam.Value = customers[i].CustNo; //   <<< THIS IS WH ERE YOUR NUMERIC VALUE GOES. 
            DelpriParam.Value = Int32.Parse(customers[i].DelPri); //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES.
            CustPrg3Param.Value = customers[i].CustPrg3; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES.
            NmParam.Value = customers[i].Nm; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 
            Gr6Param.Value = customers[i].Gr6; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 

            CreDtParam.Value = customers[i].CreDt; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 
            CreUsrParam.Value = customers[i].CreUsr; //   <<< THIS IS WHERE YOUR NUMERIC VALUE GOES. 

           cmd.ExecuteNonQuery();
    }
我知道第一个对象被传递给类,并且我已经尝试在循环中打印出当前对象的值,因此数据在那里,但在插入中被跳过

另外,我很确定这不是因为if not exists查询,因为我只检查了12个客户,我把他们跑过去发现了任何冲突

我到底做错了什么


感谢您的帮助!:

您正在索引1处启动for循环,而c是一种索引为0的语言。这意味着你实际上是从第二个记录开始

将for循环更改为:

for (int i = 0; i < customers.Count; i++)

您能否尝试/确认以下事项:

表格演员有记录吗?第一条记录是否可能已经存在于表中,即具有Delpri和Custprg3值

正如您所说的,这不是因为如果不存在,您可以尝试通过删除它来运行它吗

for循环以i=1开始。你确定你的顺序正确吗


谢谢你的意见,Maddy,我尝试了你的建议,但是选择了Steve的答案,因为它更具体。