Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
По идее необходимо обновить данные(при нажатии на 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(); } ---------------------------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 22:43 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
А ты уверен, что проблема в соединении к БД? Ошибку то выведи. Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 23:45 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
когда якобы поменял данные в выделенной строке и нажал на update выводится надпись что соединение не установлено ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 01:15 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Хорошо. Перефразирую вопрос - почему ты думаешь, что ошибка при работе с базой, а не, например, в строке CompanyID = cea.Item.Cells[2].Text; ? Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 03:17 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Согласен, скорее всего ошибка не в соединении с базой данных. При удалении данных из формы использую соединение то же и 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 10:55 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Хотя даже когда сделал так: ------------------------------------------------------------------------------------------------- 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(); ------------------------------------------------------------------------------------------------ Выводится "Соединение не установлено". Что может быть не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 11:38 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Напиши ка лучше вот так catch (Exception ex) { lbConnect.Text = ex.ToString(); } тогда хоть ошибку увидишь нормальную. Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 14:58 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Когда 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 поля становятся пустыми, получается что не изменяются данные а удалются (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 16:00 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Гм... Ошибка таки в запросе. Типичная причина ошибки: 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 и какие типы соответствующих полей в таблице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 16:10 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE Company ( IDcompany INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, [Name] VARCHAR(20) NOT NULL, Address VARCHAR(30) NULL, UNIQUE([Name]) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 16:44 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Со структурой таблицы всё понятно. А чему равны CompanyName и CompanyAddress? А еще лучше опубликуйте полный тескт запроса. Это можно выянить таким образом: breakpoint на cmd.ExecuteNonQuery(); и посмотрите значение cmd.CommandText. По идее, возможны следующие причины ошибки: 1. CompanyName.Length равно 0 2. CompanyName.Length больше 20 3. CompanyAddress.Length больше 30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 17:08 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
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; - значение в запросе правильное выдает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 17:54 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Трудно сказать. Imho, не факт, что cea.Item.Cells[4] является именно тем control-ом куда вы вводите имя фирмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 18:13 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Да, мне нужно изменять данные в самом 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 - я так понимаю отчет ведем таким образом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 18:46 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться в обновлении данных в 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" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 18:57 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Я сказал про "что-то похожее". Т.е. мой пример надо было адаптировать к вашей ситуации. ^_~ Информацию о том как работать с DataGrid с примерами можно найти здесь: http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/datagrid/doc_datagrid.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 19:01 |
|
||
|
OnUpdateCommand
|
|||
|---|---|---|---|
|
#18+
Все нормально, ваш вариант РАБОТАЕТ ), просто во время перебора всех возможных вариантов, я удалил в запросе одинарные кавычки и забыл про это. Огромное вам спасибо, вы очень сильно помогли!!! Вы могли бы посоветовать как можно сделать валидаторы на проверку вводимых данных в поля DataGrida или где об этом можно почитать. Еще раз большое вам спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 19:13 |
|
||
|
|

start [/forum/topic.php?fid=18&gotonew=1&tid=1391733]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
6ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 336ms |

| 0 / 0 |
