Member 14089238 Ответов: 1

Ошибка рассогласования подсчета параметров в C#


Вот мой код ....

private void SaveorUpdateLedger(string storedProcName)
        {
            DBSQLServer db = new DBSQLServer(AppSetting.ConnectionString());
            db.SaveOrUpdateRecord(storedProcName, GetObjectLedger());
        }

        private List<ledgerinsert> GetObjectLedger()
        {
            List<ledgerinsert> ledgerList = new List<ledgerinsert>();

            foreach (DataRow dr in Datatable.dtLedger.Rows)
            {
                LedgerInsert ledger = new LedgerInsert();

                ledger.Entry_Date = Convert.ToDateTime(dr["Entry_Date"]);

                ledger.Entry_Type = Convert.ToInt32(dr["Entry_Type"]);
                ledger.Party_ID = Convert.ToInt32(dr["Party_ID"]);

                ledger.Detail = Convert.ToString(dr["Detail"]);

                ledger.Amount = Convert.ToDecimal(dr["Amount"]);

                ledger.Account_Type = Convert.ToInt32(dr["Account_Type"]);
                ledger.User_ID = Convert.ToInt32(dr["User_ID"]);
                ledger.Sr_No = Convert.ToInt32(dr["Sr_No"]);
                ledger.PartyID_CR = Convert.ToInt32(dr["PartyID_CR"]);
                ledger.Region_ID = Convert.ToInt32(dr["Region_ID"]);
                ledger.Sector_ID = Convert.ToInt32(dr["Sector_ID"]);
                ledger.Company_ID = Convert.ToInt32(dr["Company_ID"]);
                ledger.PartyID_DR = Convert.ToInt32(dr["PartyID_DR"]);

                ledgerList.Add(ledger);

            }

            dgvPurchase.DataSource = ledgerList;
            return ledgerList;
        }



.............


//SAVE OR UPDATE EXECUTE NON-QUERY
        public void SaveOrUpdateRecord(string storedProceName, object obj)
        {
            using (SqlConnection conn = new SqlConnection(_connstring))
            {
                using (SqlCommand cmd = new SqlCommand(storedProceName, conn))
                {
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    conn.Open();

                    //Parameters
                    Type type = obj.GetType();
                    BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
                    PropertyInfo[] properties = type.GetProperties(flags);

                    foreach (var property in properties)
                    {
                        cmd.Parameters.AddWithValue("@" + property.Name, property.GetValue(obj, null));
                    }

                    cmd.ExecuteNonQuery();
                }
            }
        }


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

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

BillWoodruff

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

Richard MacCutchan

Посмотрите на элементы, возвращенные из GetProperties, и убедитесь, что они совпадают с теми, которые указаны в хранимой процедуре.

1 Ответов

Рейтинг:
1

OriginalGriff

Начните с просмотра хранимых процедур: вы передаете имя SP своим методам и создаете набор параметров для его обработки.
И вы передаете слишком много параметров SP - но мы понятия не имеем, как называется SP, что он делает, сколько параметров он ожидает, или сколько вы на самом деле передаете.

Поэтому используйте отладчик, чтобы узнать, как называется SP.
Выясните, сколько - и какого типа - параметров он ожидает.
Затем вернитесь к отладчику, чтобы узнать, сколько - и какой тип - вы передаете.

Мы ничего не можем сделать для вас!