srilekhamenon Ответов: 2

Iam getting error unknown error недостаточно параметров предоставленных команде


if (planDS.Tables.Contains("CloudBackupSchedule"))
                    {
                        dt = planDS.Tables["CloudBackupSchedule"];
                        if (dt != null && dt.Rows.Count > 0)
                        {
                            //Get field names
                            string sqlString = "UPDATE CloudBackupSchedule SET ";
                            var sqlParams = new string[dt.Rows[0].ItemArray.Count() + 1];
                            int count = 0;
                            foreach (DataColumn dc in dt.Columns)
                            {
                                if (dc.ColumnName.ToLower() == "baseplan_id")
                                {
                                    sqlString += "PlanId = @PlanId, ";
                                    sqlParams[count] = "@PlanId";
                                    count++;

                                    sqlString += "BackupScheduleId = @BackupScheduleId,";
                                    sqlParams[count] = "@BackupScheduleId";
                                    count++;
                                }
                                else
                                {

                                    sqlString += string.Format("{0} = @{0},", dc.ColumnName);
                                    sqlParams[count] = string.Format("@{0}", dc.ColumnName);
                                    count++;
                                }


                            }
                            //create query from fields                            
                            sqlString = sqlString.TrimEnd(new char[] { ',', (char)32 }) + " WHERE Planid = @planid And BackupScheduleId = @BackupScheduleId";
                            cGlobalSettings.oLogger.WriteLog(string.Format("Query={0}", sqlString));


                            sqlCmd.CommandText = sqlString;

                            foreach (DataRow dr in dt.Rows)
                            {
                                for (int i = 0; i < sqlParams.Length; i++)
                                {
                                    if (sqlParams[i] != null)
                                    {
                                        if (sqlParams[i].TrimStart(new char[] { '@' }) == "PlanId")
                                        {
                                            sqlCmd.Parameters.AddWithValue(sqlParams[i], planid);
                                            cGlobalSettings.oLogger.WriteLog(string.Format("{2}. Parameter={0},Value={1}", sqlParams[i], planid, i));
                                        }
                                        else if (sqlParams[i].TrimStart(new char[] { '@' }) == "BackupScheduleId")
                                        {
                                            sqlCmd.Parameters.AddWithValue(sqlParams[i], planid);
                                            cGlobalSettings.oLogger.WriteLog(string.Format("{2}. Parameter={0},Value={1}", sqlParams[i], planid, i));
                                        }
                                        else
                                        {
                                            sqlCmd.Parameters.AddWithValue(sqlParams[i], dr[sqlParams[i].TrimStart(new char[] { '@' })] ?? DBNull.Value);
                                            cGlobalSettings.oLogger.WriteLog(string.Format("{2}. Parameter={0},Value={1}", sqlParams[i], dr[sqlParams[i].TrimStart(new char[] { '@' })] ?? "NoValue", i));
                                        }
                                    }

                                }

                                try
                                {
                                    rowsAffected = 0;
                                    rowsAffected = sqlCmd.ExecuteNonQuery();
                                    cGlobalSettings.oLogger.WriteLog(string.Format("Rows affected= {0}", rowsAffected));
                                }
                                catch (Exception ex)
                                {
                                    cGlobalSettings.oLogger.WriteLogException("cSqliteFunction.cs::ExecuteNonQuery() ", ex);
                                }
                                
                                sqlCmd.Parameters.Clear();
                            }

                        }
                    }


журнальная информация

12-08-2016 17: 36: 02,128 | Запрос = UPDATE SET CloudBackupSchedule BackupScheduleType = @ BackupScheduleType, ScheduleSpecificDate = @ ScheduleSpecificDate, ScheduleSpecificTime = @ ScheduleSpecificTime, ScheduleRecurringType = @ ScheduleRecurringType, DailyOccursAtTime = @ DailyOccursAtTime, DailyOccursEvery = @ DailyOccursEvery, DailyOccursEveryType = @DailyOccursEveryType , DailyOccursEveryFrom = @ DailyOccursEveryFrom, DailyOccursEveryTo = @ DailyOccursEveryTo, WeeklyRecurringDays = @ WeeklyRecurringDays, MonthlyOccuranceType = @ MonthlyOccuranceType, MonthlyDaysOfMonth = @ MonthlyDaysOfMonth, MonthlyOccuranceDays = @ MonthlyOccuranceDays, MonthlyOccuranceRepeatMonth = @ MonthlyOccuranceRepeatMonth, MonthlyOccuranceStartFrom = @ MonthlyOccuranceStartFrom, YearlyOccuranceRepeatYear = @ YearlyOccuranceRepeatYear, YearlyOccuranceStartFrom = @YearlyOccuranceStartFrom , IsScheduleStopPlan = @ IsScheduleStopPlan, ScheduleStopPlanHourMinute = @ ScheduleStopPlanHourMinute, ScheduleStopPlanType = @ ScheduleStopPlanType, IsScheduleMisse dPlan = @ IsScheduleMissedPlan, CreatedDate = @ CreatedDate, UpdatedDate = @ UpdatedDate, PlanId = @PlanId, BackupScheduleId = @BackupScheduleId ГДЕ Planid = @planid И BackupScheduleId = @BackupScheduleId
12-08-2016 17:36:02.130|0. Параметр=@BackupScheduleType, Значение=0
12-08-2016 17:36:02.132|1. Параметр=@ScheduleSpecificDate, Значение=
12-08-2016 17:36:02.133|2. Параметр=@ScheduleSpecificTime, Значение=
12-08-2016 17:36:02.135|3. Параметр=@ScheduleRecurringType, Значение=0
12-08-2016 17:36:02.136|4. Параметр=@DailyOccursAtTime, Значение=
12-08-2016 17:36:02.138|5. Параметр=@DailyOccursEvery, Значение=0
12-08-2016 17:36:02.139|6. Параметр=@DailyOccursEveryType, Значение=
12-08-2016 17:36:02.141|7. Параметр=@DailyOccursEveryFrom, Значение=
12-08-2016 17:36:02.142|8. Параметр=@DailyOccursEveryTo, Значение=
12-08-2016 17:36:02.144|9. Параметр=@WeeklyRecurringDays, Значение=
12-08-2016 17:36:02.145|10. Параметр=@MonthlyOccuranceType, Значение=0
12-08-2016 17:36:02.146|11. Параметр=@MonthlyDaysOfMonth, Значение=0
12-08-2016 17:36:02.148|12. Параметр=@MonthlyOccuranceDays, Значение=
12-08-2016 17:36:02.149|13. Параметр=@MonthlyOccuranceRepeatMonth, Значение=0
12-08-2016 17:36:02.151|14. Параметр=@MonthlyOccuranceStartFrom, Значение=
12-08-2016 17:36:02.152|15. Параметр=@YearlyOccuranceRepeatYear, Значение=0
12-08-2016 17:36:02.153|16. Параметр=@YearlyOccuranceStartFrom, Значение=
12-08-2016 17:36:02.154|17. Параметр=@IsScheduleStopPlan, Значение=0
12-08-2016 17:36:02.156|18. Параметр=@ScheduleStopPlanHourMinute, Значение=0
12-08-2016 17:36:02.157|19. Параметр=@ScheduleStopPlanType, Значение=
12-08-2016 17:36:02.158|20. Параметр=@IsScheduleMissedPlan, Значение=0
12-08-2016 17:36:02.160|21. Параметр=@CreatedDate, Значение=05-08-2016 17: 01:28
12-08-2016 17:36:02.161|22. Параметр=@UpdatedDate, Значение=
12-08-2016 17:36:02.162|23. Параметр=@PlanId, Значение=1
12-08-2016 17:36:02.163|24. Параметр=@BackupScheduleId, Значение=1

Что я уже пробовал:

iam сопоставил все параметры в запросе, но все равно получил ошибку

F-ES Sitecore

Используйте отладчик для проверки выполняемого SQL-кода, а также коллекции параметров. Вероятно, где-то возникнет несоответствие, и поскольку мы не можем запустить ваш код, поскольку у нас нет доступа к вашим данным, его трудно отлаживать удаленно.

srilekhamenon

имеет ли значение последовательность параметров ?

2 Ответов

Рейтинг:
2

ZurdoDev

Порядок параметров не имеет значения при использовании AddWithValue. Первый параметр AddWithValue - это имя параметра, поэтому порядок больше не имеет значения.

Ошибка просто означает, что ваш SQL ожидает больше параметров, чем вы ему дали. Все, что вам нужно сделать, это пройти через код и убедиться, что он делает то, что вы ожидаете. Это довольно легко исправить самостоятельно.


Рейтинг:
1

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Запустите этот код на отладчике, когда возникнет ошибка, проверьте, какой параметр у вас есть и каков ваш запрос.