【问题标题】:An SqlParameter with ParameterName '@d23' is not contained by this sqlparametercollection此 sqlparametercollection 不包含具有 ParameterName '@d23' 的 SqlParameter
【发布时间】:2016-03-24 14:53:12
【问题描述】:

我正在将参数添加到 CommandParameters 集合以重复执行;每个数据网格行一次。

我收到此异常。

"一个SqlParameter with ParameterName '@dx' (x代表一个参数 name) 不包含在此 SqlParameterCollection 中"

我在哪里做错了什么?

try
{
   con = new SqlConnection(cs.DBConn);
   con.Open();

    string cb = "insert into feepayment(FeePaymentID,ScholarNo,FeeID,FDCourse,FDBranch,Semester,TutionFees,LibraryFees,catfees,stationaryfees,textbooksfees,swimmingfees,boardingfees,languagesfees,mealsfees,othersfees,computerfees,activityfees,insurancefees,orphansfees,diaryfees,furniturefees,maintenancefees,TotalFees,DateOfPayment,ModeOfPayment,PaymentModeDetails,TotalPaid,Fine,DueFees,PreviousTerm) VALUES (@d23,@d24,@d1,@d2,@d3,@d4,@d5,@d6,@d7,@d8,@d9,@d10,@d11,@d12,@d13,@d14,@d15,@d16,@d17,@d18,@d19,@d20,@d21,@d22,@d25,@d26,@d27,@d28,@d29,@d30,@d31,@d32,@d33)";

    cmd1 = new SqlCommand(cb);

    cmd1.Connection = con;
    // Add Parameters to Command Parameters collection
    cmd1.Parameters.Add(new SqlParameter("@d23", System.Data.SqlDbType.NChar, 200, "FeePaymentID"));
    cmd1.Parameters.Add(new SqlParameter("@d24", System.Data.SqlDbType.NChar, 15, "ScholarNo"));
    cmd1.Parameters.Add(new SqlParameter("@d1", System.Data.SqlDbType.NChar, 20, "FeeId"));
    cmd1.Parameters.Add(new SqlParameter("@d2", System.Data.SqlDbType.NChar, 20, "FDCourse"));
    cmd1.Parameters.Add(new SqlParameter("@d3", System.Data.SqlDbType.NChar, 30, "FDBranch"));
    cmd1.Parameters.Add(new SqlParameter("@d4", System.Data.SqlDbType.NChar, 10, "Semester"));
    cmd1.Parameters.Add(new SqlParameter("@d5", System.Data.SqlDbType.Int, 10, "TutionFees"));
    cmd1.Parameters.Add(new SqlParameter("@d6", System.Data.SqlDbType.Int, 10, "LibraryFees"));
    cmd1.Parameters.Add(new SqlParameter("@d7", System.Data.SqlDbType.Int, 10, "catfees"));
    cmd1.Parameters.Add(new SqlParameter("@d8", System.Data.SqlDbType.Int, 15, "stationaryfees"));
    cmd1.Parameters.Add(new SqlParameter("@d9", System.Data.SqlDbType.Int, 10, "textbookfees"));
    cmd1.Parameters.Add(new SqlParameter("@d10", System.Data.SqlDbType.Int, 10, "swimmingfees"));
    cmd1.Parameters.Add(new SqlParameter("@d11", System.Data.SqlDbType.Int, 10, "boardingfees"));
    cmd1.Parameters.Add(new SqlParameter("@d12", System.Data.SqlDbType.Int, 10, "languagesfees"));
    cmd1.Parameters.Add(new SqlParameter("@d13", System.Data.SqlDbType.Int, 10, "mealsfees"));
    cmd1.Parameters.Add(new SqlParameter("@d14", System.Data.SqlDbType.Int, 10, "othersfees"));
    cmd1.Parameters.Add(new SqlParameter("@d15", System.Data.SqlDbType.Int, 10, "computerfees"));
    cmd1.Parameters.Add(new SqlParameter("@d16", System.Data.SqlDbType.Int, 10, "activityfees"));
    cmd1.Parameters.Add(new SqlParameter("@d17", System.Data.SqlDbType.Int, 10, "insurancefees"));
    cmd1.Parameters.Add(new SqlParameter("@d18", System.Data.SqlDbType.Int, 10, "orphansfees"));
    cmd1.Parameters.Add(new SqlParameter("@d19", System.Data.SqlDbType.Int, 10, "diaryfees"));
    cmd1.Parameters.Add(new SqlParameter("@d20", System.Data.SqlDbType.Int, 10, "furniturefees"));
    cmd1.Parameters.Add(new SqlParameter("@d21", System.Data.SqlDbType.Int, 10, "maintenancefees"));
    cmd1.Parameters.Add(new SqlParameter("@d22", System.Data.SqlDbType.Int, 10, "TotalFees"));
    cmd1.Parameters.Add(new SqlParameter("@d25", System.Data.SqlDbType.NChar, 30, "DateOfPayment"));
    cmd1.Parameters.Add(new SqlParameter("@d26", System.Data.SqlDbType.NChar, 20, "ModeOfPayment"));
    cmd1.Parameters.Add(new SqlParameter("@d27", System.Data.SqlDbType.VarChar, 200, "PaymentModeDetails"));
    cmd1.Parameters.Add(new SqlParameter("@d28", System.Data.SqlDbType.Int, 10, "TotalPaid"));
    cmd1.Parameters.Add(new SqlParameter("@d29", System.Data.SqlDbType.Int, 10, "Fine"));
    cmd1.Parameters.Add(new SqlParameter("@d30", System.Data.SqlDbType.Int, 10, "DueFees"));
    cmd1.Parameters.Add(new SqlParameter("@d31", System.Data.SqlDbType.Int, 10, "RegistrationFees"));
    cmd1.Parameters.Add(new SqlParameter("@d32", System.Data.SqlDbType.Int, 10, "MusicFees"));
    cmd1.Parameters.Add(new SqlParameter("@d33", System.Data.SqlDbType.Int, 10, "PreviousTerm"));

    // Prepare command for repeated execution
    cmd1.Prepare();
    // Data to be inserted
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {

        if (!row.IsNewRow)
        {
            invoice(row.Cells[0].Value.ToString(), row.Cells[4].Value.ToString());

            cmd1.Parameters["@d23"].Value = paymentID;
            cmd1.Parameters["@d24"].Value = row.Cells[0].Value.ToString();

            cmd1.Parameters["@d1"].Value = row.Cells[4].Value.ToString();
            cmd1.Parameters["@d2"].Value = course;
            cmd1.Parameters["@d3"].Value = branch;
            cmd1.Parameters["@d4"].Value = sem;
            cmd1.Parameters["@d5"].Value = tution;
            cmd1.Parameters["@d6"].Value = library;
            cmd1.Parameters["@d7"].Value = cat;
            cmd1.Parameters["@d8"].Value = stationary;
            cmd1.Parameters["@d9"].Value = textbook;
            cmd1.Parameters["@d10"].Value = swimming;

            if (row.Cells[3].Value.Equals("Boarder"))
            {
                cmd1.Parameters["@d11"].Value = boarding.ToString();

                cmd1.Parameters["@d22"].Value = totals.ToString();
            }
            else if (row.Cells[3].Value.Equals("Commuter"))
            {

                cmd1.Parameters["@d11"].Value = "0";
                cmd1.Parameters["@d22"].Value = (totals - boarding).ToString();

            }

            cmd1.Parameters["@d12"].Value = languages;
            cmd1.Parameters["@d13"].Value = meals;
            cmd1.Parameters["@d14"].Value = others;
            cmd1.Parameters["@d15"].Value = computer;
            cmd1.Parameters["@d16"].Value = activity;
            cmd1.Parameters["@d17"].Value = insurance;
            cmd1.Parameters["@d18"].Value = orphans;
            cmd1.Parameters["@d19"].Value = diary;
            cmd1.Parameters["@d20"].Value = furniture;
            cmd1.Parameters["@d21"].Value = maintenance;
            cmd1.Parameters["@d25"].Value = effectivedate.Text;
            cmd1.Parameters["@d26"].Value = "";
            cmd1.Parameters["@d27"].Value = "";
            cmd1.Parameters["@d28"].Value = 0;
            cmd1.Parameters["@d29"].Value = 0;
            cmd1.Parameters["@d30"].Value = 0;
            cmd1.Parameters["@d31"].Value = registration;
            cmd1.Parameters["@d32"].Value = music;
            cmd1.Parameters["@d33"].Value = int.Parse(prevdue);

            cmd1.ExecuteNonQuery();
        }
    }
    con.Close();
    MessageBox.Show("Successfully saved - r", "Entry", MessageBoxButtons.OK, MessageBoxIcon.Information);
    btnSave.Enabled = false;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error>>>>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

【问题讨论】:

  • parameterName @d41 是我在错误持续存在后尝试的测试。请注意,错误仍然会返回。有什么想法吗?
  • 您是否尝试删除所有 @d41 引用?
  • 你有31个字段和33个参数。

标签: c#


【解决方案1】:

当你发帖时,不要只转储你所有的代码,只放重要信息。

我看到的插入列表中没有 D41,正如 DBugger 所说,它应该是 cmd1

 cmd1.Parameters.Add(new SqlParameter("@d41", System.Data.SqlDbType.NChar, 10, "Semester"));

编辑

您缺少的另一件事是您在插入语句中缺少一个参数,有 34 列,只有 33 个值。你需要一个@d34。在插入语句的末尾

理想情况下,您应该将所有信息放在某种结构中,并在循环中添加参数,并使用字符串构建器构造插入语句。它将清理您的代码并使其更易于调试

【讨论】:

  • parameterName @d41 是我在错误持续存在后尝试的测试。注意,错误仍然被返回。有什么想法吗?
  • 让我知道这是否解决了您的问题,如果它确实记得将您的答案标记为已完成,
【解决方案2】:

插入语句中缺少@d41

VALUES (@d23,@d24,@d1,@d2,@d3,@d4,@d5,@d6,@d7,@d8,@d9,@d10,@d11,@d12,@d13,@d14,@d15,@d16,
@d17,@d18,@d19,@d20,@d21,@d22,@d25,@d26,@d27,@d28,@d29,@d30,@d31,@d32,@d33)

您将参数“@d41”添加到 cmd 而不是 cmd1

cmd.Parameters.Add(new SqlParameter("@d41", System.Data.SqlDbType.NChar, 10, "Semester"));

在您的 for 循环中,您尝试向“@d41”添加一个值,该值对于命令 cmd1 不存在

cmd1.Parameters["@d41"].Value = "";

【讨论】:

  • parameterName @d41 是我在错误持续存在后尝试的测试。注意,错误仍然被返回。有什么想法吗?
  • @[J. Doe] 您是否尝试删除所有“@d41”引用?确切的错误信息是什么? “@d23”不在参数集合中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多