powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не работает Update метод в GridView
18 сообщений из 18, страница 1 из 1
Не работает Update метод в GridView
    #37447877
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите решить следующую проблему :
Есть GridView, привязанный к ObjDataSource. Создал служебный класс для методов выборки, удаления, обновления, которые используют хранимые процедуры. Методы select и delete работают нормально, а вот Update при нажатии кнопки "обновить" выдаёт следующую ошибку :
Код: plaintext
1.
ObjectDataSource 'ObjectDataSource1' не может найти не групповой метод 'UpdateTovar', который имеет параметры: idTovar, name, vid, vid2, countTovar, Description, Price, DatePrice, TovarID.
Здесь указано в методе 9 параметров, а у меня их повсюду восемь - последний TovarId непонятно откуда берётся.
aspx-файл :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        AutoGenerateColumns="False" BackColor="White" BorderColor="#3366CC" 
        BorderStyle="None" BorderWidth="1px" CellPadding="4" DataKeyNames="TovarID" 
        DataSourceID="ObjectDataSource1">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                ShowSelectButton="True" />
            <asp:BoundField DataField="TovarID" HeaderText="TovarID" SortExpression="TovarID" />
            <asp:BoundField DataField="name" HeaderText="name" 
                SortExpression="name" />
            <asp:BoundField DataField="vid" HeaderText="vid" SortExpression="vid" />
            <asp:BoundField DataField="vid2" HeaderText="vid2" SortExpression="vid2" />
            <asp:BoundField DataField="countTovar" HeaderText="countTovar" 
                SortExpression="countTovar" />
            <asp:BoundField DataField="Description" HeaderText="Description" 
                SortExpression="Description" />
            <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
            <asp:BoundField DataField="DatePrice" HeaderText="DatePrice" 
                SortExpression="DatePrice" />
        </Columns>
        <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
        <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
        <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
        <RowStyle BackColor="White" ForeColor="#003399" />
        <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
        <SortedAscendingCellStyle BackColor="#EDF6F6" />
        <SortedAscendingHeaderStyle BackColor="#0D4AC4" />
        <SortedDescendingCellStyle BackColor="#D6DFDF" />
        <SortedDescendingHeaderStyle BackColor="#002876" />
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
        DeleteMethod="DeleteTovar" SelectMethod="GetAllTovars" 
        TypeName="Catalog.TovarDB" UpdateMethod="UpdateTovar">
        <DeleteParameters>
            <asp:Parameter Name="TovarID" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="idTovar" Type="Int32" />
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="vid" Type="String" />
            <asp:Parameter Name="vid2" Type="String" />
            <asp:Parameter Name="countTovar" Type="Int32" />
            <asp:Parameter Name="description" Type="String" />
            <asp:Parameter Name="price" Type="Int32" />
            <asp:Parameter Name="datePrice" Type="DateTime" />
        </UpdateParameters>
    </asp:ObjectDataSource>

Метод Update класса TovarDB :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public void UpdateTovar(int idTovar, string name, string vid, string vid2, int countTovar, string description, int price, DateTime datePrice)
        {
            SqlConnection connection = Connection.Create();
            SqlCommand cmd = new SqlCommand("UpdateTovar", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@IdTovar", SqlDbType.Int, 4));
            cmd.Parameters["IdTovar"].Value = IdTovar;
            cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 30));
            cmd.Parameters["name"].Value = name;
            cmd.Parameters.Add(new SqlParameter("@vid", SqlDbType.NVarChar, 30));
            cmd.Parameters["vid"].Value = vid;
            cmd.Parameters.Add(new SqlParameter("@vid2", SqlDbType.NVarChar, 30));
            cmd.Parameters["vid2"].Value = vid2;
            cmd.Parameters.Add(new SqlParameter("@countTovar", SqlDbType.Int, 4));
            cmd.Parameters["countTovar"].Value = countTovar;
            cmd.Parameters.Add(new SqlParameter("@Description", SqlDbType.NVarChar, 50));
            cmd.Parameters["Description"].Value = description;
            cmd.Parameters.Add(new SqlParameter("@Price", SqlDbType.Int, 4));
            cmd.Parameters["@Price"].Value = price;
            cmd.Parameters.Add(new SqlParameter("@datePrice", SqlDbType.DateTime, 4));
            cmd.Parameters["@datePrice"].Value = datePrice;
            try
            {
                connection.Open();
                cmd.ExecuteNonQuery();
                
            }
            catch (SqlException err)
            {
                throw new ApplicationException("Data error Update.");
            }
            finally
            {
                connection.Close();
            }
        }  

Класс TovarDetails :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class TovarDetails
    {
        private int tovarID;
        private string name;
        private string vid;
        private string vid2;
        private int countTovar;
        private string description;
        private int price;
        private datetime datePrice;

        public TovarDetails()
        {

        }

public TovarDetails(int tovarID, string name, string vid, string vid2, int countTovar, string description, int price, datetime datePrice)
        {
            this.tovarID= tovarID;
            this.name= name;
            this.vid= vid;
            this.vid2= vid2;
            this.countTovar= countTovar;
            this.description = description;
            this.price = price;
            this.datePrice = datePrice;
         }

       //далее 8 свойств с get-set методами
}

Где здесь ошибка, помогите разобраться, откуда этот девятый параметр лезет?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37447881
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,

отсюда берется DataKeyNames="TovarID"
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37447923
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zoriaerman,

отсюда берется DataKeyNames="TovarID"
и что делать? Этот же параметр нужно указывать обязательно или как?
Каково решение этой проблемы?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37447937
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оффблин, как же хорошо мне живется с Linq2Sql
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37447969
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Паганель+
оффблин, как же хорошо мне живется с Linq2Sql

Может быть оно и так, но с Linq ещё не знаком.
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37447979
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,

можно:
1. убрать <asp:Parameter Name="idTovar" Type="Int32" /> из <UpdateParameters>

2. подписаться на событие gridview_updating и поманипулировать набором параметров в нем.
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37448032
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zoriaerman,

можно:
1. убрать <asp:Parameter Name="idTovar" Type="Int32" /> из <UpdateParameters>

2. подписаться на событие gridview_updating и поманипулировать набором параметров в нем.

Сделал по-первому методу :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<UpdateParameters>            
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="vid" Type="String" />
            <asp:Parameter Name="vid2" Type="String" />
            <asp:Parameter Name="countTovar" Type="Int32" />
            <asp:Parameter Name="description" Type="String" />
            <asp:Parameter Name="price" Type="Int32" />
            <asp:Parameter Name="datePrice" Type="DateTime" />
        </UpdateParameters>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public void UpdateTovar(string name, string vid, string vid2, int countTovar, string description, int price, DateTime datePrice)
        {
            SqlConnection connection = Connection.Create();
            SqlCommand cmd = new SqlCommand("UpdateTovar", connection);
            cmd.CommandType = CommandType.StoredProcedure;

            //cmd.Parameters.Add(new SqlParameter("@IdTovar", SqlDbType.Int, 4));
            //cmd.Parameters["IdTovar"].Value = IdTovar;
            cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 30));
            cmd.Parameters["name"].Value = name;
            cmd.Parameters.Add(new SqlParameter("@vid", SqlDbType.NVarChar, 30));
            cmd.Parameters["vid"].Value = vid;
            cmd.Parameters.Add(new SqlParameter("@vid2", SqlDbType.NVarChar, 30));
            cmd.Parameters["vid2"].Value = vid2;
            cmd.Parameters.Add(new SqlParameter("@countTovar", SqlDbType.Int, 4));
            cmd.Parameters["countTovar"].Value = countTovar;
            cmd.Parameters.Add(new SqlParameter("@Description", SqlDbType.NVarChar, 50));
            cmd.Parameters["Description"].Value = description;
            cmd.Parameters.Add(new SqlParameter("@Price", SqlDbType.Int, 4));
            cmd.Parameters["@Price"].Value = price;
            cmd.Parameters.Add(new SqlParameter("@datePrice", SqlDbType.DateTime, 4));
            cmd.Parameters["@datePrice"].Value = datePrice;
            try
            {
                connection.Open();
                cmd.ExecuteNonQuery();
                
            }
            catch (SqlException err)
            {
                throw new ApplicationException("Data error Update.");
            }
            finally
            {
                connection.Close();
            }
        } 
Та же ошибка :
Код: plaintext
1.
ObjectDataSource 'ObjectDataSource1' не может найти не групповой метод 'UpdateTovar', который имеет параметры: name, vid, vid2, countTovar, Description, Price, DatePrice, TovarID.
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37448035
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,

а где в UpdateTovar(string name, ... TovarID ?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37448967
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а где в UpdateTovar(string name, ... TovarID ?

Если добавить в списке параметров TovarId - ошибка :
SqlParameter с ParameterName "TovarID" не содержится в данном SqlParameterCollection.
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37448978
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermanSqlParameter с ParameterName "TovarID" не содержится в данном SqlParameterCollection.а почему он не содержится?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37449041
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПаганельermanSqlParameter с ParameterName "TovarID" не содержится в данном SqlParameterCollection.а почему он не содержится?
У меня он определён вместе с другими параметрами
Код: plaintext
1.
2.
cmd.Parameters.Add(new SqlParameter("@TovarID", SqlDbType.Int, 4));
cmd.Parameters["TovarID"].Value = TovarID;
Он первый в списке параметров в методе UpdateTovar(). Но если я его перемещаю ниже, то подобная ошибка возникает со следующим параметром - в данном случае name.
В чём здесь проблема? Помогите разобраться.
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37449529
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставьте брякпоинт в ту строчку, где вываливается ошибка
и посмотрите под дебагом - что там в коллекции параметров
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37449900
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПаганельПоставьте брякпоинт в ту строчку, где вываливается ошибка
и посмотрите под дебагом - что там в коллекции параметров

Поставил отладку на первых двух строках, где должен вставляться первый параметр.
В коллекции нет этого параметра - не заполняется почему-то. Каков выход?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37450018
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть?
После выполненияerman
Код: plaintext
1.
cmd.Parameters.Add(new SqlParameter("@TovarID", SqlDbType.Int, 4));
внутри cmd.Parameters ноль элементов, я правильно понял?
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37450350
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПаганельТо есть?
После выполненияerman
Код: plaintext
1.
cmd.Parameters.Add(new SqlParameter("@TovarID", SqlDbType.Int, 4));
внутри cmd.Parameters ноль элементов, я правильно понял?
Внутри cmd.Parameters - 1 элемент. В строке - cmd.Parameters["name"] такая запись
Код: plaintext
1.
cmd.Parameters["name"] запустило исключение типа "System.IndexOutOfRangeException"
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37450353
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имена параметров нужно задавать без "@"
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37450354
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermanВнутри cmd.Parameters - 1 элементГляньте под дебагом какое у него имя
...
Рейтинг: 0 / 0
Не работает Update метод в GridView
    #37450401
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без этого @ заработало, спасибо всем, кто помогал.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не работает Update метод в GridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]