powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / OnUpdateCommand
17 сообщений из 17, страница 1 из 1
OnUpdateCommand
    #33849471
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По идее необходимо обновить данные(при нажатии на Edit), которые выводятся в DataGrid(обновление производится внутри самого DataGrida).
 
Но в данном методе  не удается соединиться с базой(на страничке выводится надпись "Соединение не установлено" в catch которая).
Когда комментирую строку cmd.ExecuteNonQuery(), соединение производится, но данные не обновляются.

Помогите пожалуйста разобраться с обновлением данных в DataGride
 
-----------------------------------------------------------------------------------
protected void OnEdit(object sender, DataGridCommandEventArgs cea)
    {
        myDataGrid.EditItemIndex = cea.Item.ItemIndex;
        DataBind();
    }
protected void OnUpdate(object sender, DataGridCommandEventArgs cea)
    {
        string CompanyID, CompanyName, CompanyAddress;
        CompanyName     = Request.Form[1].ToString();
        CompanyAddress  = Request.Form[2].ToString();
       
        SqlConnection cn = new System.Data.SqlClient.SqlConnection( strCon);
        try
        {
            cn.Open();
            CompanyID = cea.Item.Cells[2].Text;
           
            cmd = new System.Data.SqlClient.SqlCommand(" UPDATE Company SET  [Name] = ' " + CompanyName + " '  ,Address = ' " + CompanyAddress +                   " ' WHERE IDcompany = "  + CompanyID, cn);

           cmd.ExecuteNonQuery();
        }
        catch
        {
            lbConnect.Text = "Соединение не установлено";
        }
        finally
        {
            cn.Close();
        }
 
        myDataGrid.EditItemIndex = -1;
        DataBind();
    }
----------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33849521
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ты уверен, что проблема в соединении к БД? Ошибку то выведи.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33849558
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
когда якобы поменял данные в выделенной строке и нажал на update выводится надпись что соединение не установлено 
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33849591
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо. Перефразирую вопрос - почему ты думаешь, что ошибка при работе с базой, а не, например, в строке CompanyID = cea.Item.Cells[2].Text; ?

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33850109
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен, скорее всего ошибка не в соединении с базой данных.
При удалении данных из формы использую соединение то же и IDcompany присваиваю такое же значение (cea.Item.Cells[2].Text) и там все работает.

Скорее всего здесь ошибка в:
 CompanyName = Request.Form[1].ToString();       
 CompanyAddress = Request.Form[2].ToString();
Потомучто в этом случае соединение не устанвливается.

Пробовал значения для этиз переменных получать таким образом:
CompanyName    = cea.Item.Cells[3].Text;
CompanyAddress = cea.Item.Cells[4].Text;
Соединение в этом случае устанавливается, но данные все равно не обновляются. А обновление мне нужно сделать в самой DataGrid.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33850285
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя даже когда сделал так:
-------------------------------------------------------------------------------------------------
cn = new System.Data.SqlClient.SqlConnection( strCon);
try
{
       cn.Open();
           
       cmd = new System.Data.SqlClient.SqlCommand(" UPDATE Company SET  "+
       " [Name] = ' myName '  ,Address = 'myAddress ' WHERE IDcompany = 1", cn);
       cmd.ExecuteNonQuery();
 }
 catch
 {
         lbConnect.Text = "Соединение не установлено";
 }
  finally
 {
       cn.Close();
 }
 
myDataGrid.EditItemIndex = -1;
DataBind();
------------------------------------------------------------------------------------------------
 
Выводится "Соединение не установлено".
Что может быть не так?
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33851254
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напиши ка лучше вот так
catch (Exception ex)
{
lbConnect.Text = ex.ToString();
}
тогда хоть ошибку увидишь нормальную.

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33851552
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда CompanyName и CompanyAddress присваиваю  значения таким способом:
CompanyName =  Request.Form[1].ToString();
CompanyAddress =  Request.Form[2].ToString();

Появляется такая ошибка:
---------------------------------------------------------------------
System.Data.SqlClient.SqlException: String or binary data would be truncated. The statement has been terminated. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at SqlCommand.OnUpdateCompany(Object sender, DataGridCommandEventArgs cea)
------------------------------------------------------------------------------------------------------------
 
Когда таким способом:
CompanyName = cea.Item.Cells[4].Text;
CompanyAddress = cea.Item.Cells[5].Text;

Ошибок не возникает, с соединением с БД все похоже нормально, НО когда меняю данные и нажимаю на Update поля становятся пустыми, получается что не изменяются данные а удалются ((
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33851607
v_tarasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гм... Ошибка таки в запросе.

Типичная причина ошибки:
This error occurs, when the length of the value entered by you into a char, varchar, nchar, nvarchar column is longer than the maximum length of the column. For example, inserting 'FAQ' into a char(2) column would result in this error.

Какая длина у CompanyName и CompanyAddress и какие типы соответствующих полей в таблице?
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33851763
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CREATE TABLE Company
(
 IDcompany INT         IDENTITY(1, 1) NOT NULL PRIMARY KEY,
 [Name]    VARCHAR(20) NOT NULL,
 Address   VARCHAR(30) NULL,
 UNIQUE([Name])
)
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33851875
v_tarasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со структурой таблицы всё понятно. А чему равны CompanyName и CompanyAddress?

А еще лучше опубликуйте полный тескт запроса. Это можно выянить таким образом: breakpoint на cmd.ExecuteNonQuery(); и посмотрите значение cmd.CommandText.

По идее, возможны следующие причины ошибки:
1. CompanyName.Length равно 0
2. CompanyName.Length больше 20
3. CompanyAddress.Length больше 30
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852065
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cmd.CommandText:
---------------------------------------------------------------------------
" UPDATE Company SET [Name] = '' ,Address = '' WHERE IDcompany = 1"
--------------------------------------------------------------------------
Хотя на форме данные ввел.

Разве таким способом нельзя определить значения?
CompanyName    = cea.Item.Cells[4].Text;  
CompanyAddress = cea.Item.Cells[5].Text;

Для  CompanyID, который определяется как  CompanyID = cea.Item.Cells[3].Text; - значение в запросе правильное выдает.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852145
v_tarasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Трудно сказать. Imho, не факт, что cea.Item.Cells[4] является именно тем control-ом куда вы вводите имя фирмы.
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852230
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мне нужно изменять данные в самом DataGrid.
Попробовал сделать так как вы сказали "((TextBox)(e.Item.Cells[4].Controls[0])).Text", теперь cmd.CommandText такой:
--------------------------------------------------------------------
 UPDATE Company SET [Name] = Private ,Address = Private WHERE IDcompany = 1
------------------------------------------------------------------------------------------------------
Но обновления не происходит.

Вобще структцра DataGrida на форме такая(расположение столбцов):
Add, Edit, Delete, IDcompany, Name, Address.
  |       |         |            |                  |            |
 0       1        2           3                4          5  - я так понимаю отчет ведем таким образом
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852253
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться в обновлении данных в DataGrid, пожалуйста.

Необходимо обновить данные в самом DataGrid, для этого нужно выбрать поля.
Я сначала делал так:
---------------------------------------
CompanyName = e.Item.Cells[4].Text;
CompanyAddress = e.Item.Cells[5].Text;
---------------------------------------
При этом данные не обновлялись, в cmd.CommandTExt было :
" UPDATE Company SET [Name] = '' ,Address = '' WHERE IDcompany = 1"

Затем я сделал так:
CompanyName = ((TextBox)(cea.Item.Cells[4].Controls[0])).Text;
CompanyAddress = ((TextBox)(cea.Item.Cells[5].Controls[0])).Text;

Данные все равно не обновляются, но в cmd.CommandTExt уже:
" UPDATE Company SET [Name] = Hello ,Address = Hello WHERE IDcompany = 1"
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852260
v_tarasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сказал про "что-то похожее". Т.е. мой пример надо было адаптировать к вашей ситуации. ^_~

Информацию о том как работать с DataGrid с примерами можно найти здесь: http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/datagrid/doc_datagrid.aspx
...
Рейтинг: 0 / 0
OnUpdateCommand
    #33852290
Ivan5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все нормально, ваш вариант  РАБОТАЕТ ), просто во время перебора всех возможных вариантов, я удалил в запросе одинарные кавычки и забыл про это.

Огромное вам спасибо, вы очень сильно помогли!!!

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

Еще раз большое вам спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / OnUpdateCommand
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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