Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/17: Рейтинг темы: голосов - 17, средняя оценка - 4.59
yoyki
1 / 1 / 0
Регистрация: 05.03.2012
Сообщений: 15
1

Ошибка сохранения данных "Ошибка преобразования значения varchar "id" в тип данных int"

18.03.2012, 23:53. Просмотров 3287. Ответов 10
Метки нет (Все метки)

C#
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
private void btnSaveSettings_Click(object sender, EventArgs e)
        {
            string connStr = @"Data Source=(local)\SQLEXPRESS;
                            Initial Catalog=UkiCreditSystem;
                            Integrated Security=True";
 
            SqlConnection conn = new SqlConnection(connStr);
            try
            {
                //пробуем подключится
                conn.Open();
            }
            catch (SqlException se)
            {
                MessageBox.Show("error {0}",se.ToString());
                return;
            }
 
            SqlCommand cmd = new SqlCommand("Update SettingsBank" +
                " Set bik = @BIK where 'id' = 1", conn);
            /*Работаем с параметрами(SqlParameter), эта техника позволяет уменьшить
            кол-во ошибок и достичь большего быстродействия
            но требует и больших усилий в написании кода*/
            //объявляем объект класса SqlParameter
            SqlParameter param = new SqlParameter();
            //задаем имя параметра
            param.ParameterName = "@BIK";
            //задаем значение параметра
            param.Value = textBoxBIK.Text;
            //задаем тип параметра
            param.SqlDbType = SqlDbType.NChar;
            //передаем параметр объекту класса SqlCommand
            cmd.Parameters.Add(param);
           
            //try
            //{
                cmd.ExecuteNonQuery();
            //}
 
        }
Есть текстбокс. TextBoxBIK. Загружает из бд нормально. Меняю значение, нажимаю кнопку, код к которой приведен выше. получаю ошибку

Ошибка преобразования значения varchar "id" в тип данных int.
Очень долго пытался понять в чем она.
В бд id первичный ключ, int. Подскажите плз

Добавлено через 1 час 16 минут
Отлично, банально вызываем

xxxTableAdapter.Update(xxxDataSet);

проблема теперь в том, что в gridview данные обновляется только после клика по ней. Иначе там остаются старые. Как это исправить?

Добавлено через 39 минут
C#
1
2
3
4
5
6
7
8
9
10
11
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                //this.settingsBankTableAdapter.Fill(this.ukiCreditSystemDataSet.SettingsBank);  - вызывает изменение значения в textbox
                //settingsBankBindingSource.ResetBindings();  - вызывает изменение значения в textbox
                //settingsBankBindingSource.ResetItem(0);  - вызывает изменение значения в textbox
 
                //dataGridView1.Focus(); - работает если до энтера по textbox'y был выбран необходимый нам столбик))
            }
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 23:53
Ответы с готовыми решениями:

Ошибка преобразования значения varchar в тип данных int"
Нужно цифру из выбранного ряда в dataGridView1 разделить на 3 и вывести результат в текстбокс...

Обновление данных и ошибка "Является "тип", но используется как "переменная"
Код кнопки обновить ,базу данных (button1) пишет ошибку Ошибка 1 "Склад_Фамилия.СкладDataSet"...

Обновление источника данных и ошибка "Не удалось привести тип объекта "System.Data.DataView" к типу "System.Data.IDataReader"
Доброй ночи. При попытке обновления источника данных, выбрасывает следущую ошибку: "Не удалось...

Ошибка "Не удалось привести тип объекта "System.Data.DataRowView" к типу "System.IConvertible""
Здравствуйте,столкнулся с некой ошибкой.Привязал данные к comboBox пытаюсь выполнить процедуру...

SqlServerCe - "ошибка преобразования данных"
CREATE TABLE (" + "id int NOT NULL IDENTITY (1,1) PRIMARY KEY," + ...

10
serg42
121 / 103 / 7
Регистрация: 14.02.2010
Сообщений: 263
19.03.2012, 12:17 2
Цитата Сообщение от yoyki Посмотреть сообщение
проблема теперь в том, что в gridview данные обновляется только после клика по ней. Иначе там остаются старые. Как это исправить?
Выкладывайте код - какой источник данных Вы подключаете и как.
0
yoyki
1 / 1 / 0
Регистрация: 05.03.2012
Сообщений: 15
19.03.2012, 13:28  [ТС] 3
вот проект. Решил скинуть его, так как адо.нет для меня полный ад, поэтому все данные я подключал через конструктор
База данных весьма проста - 1 таблица с 3 параметрами и 1 строчкой данных

В итоге получаем GridView и 2 textbox'a. Если выбрать ячейку в таблице, текстбоксы заполняются. Изменяя текст в текстбоксе, поидее, должно меняться значение в ячейке. Но это происходит только если ее выбрать, причем именно мышкой, причем именно второй столбик.

PS: проблема с правым текстбоксом, левый еще даже не менялся

WindowsFormsApplication2.7z

script.txt
0
yoyki
1 / 1 / 0
Регистрация: 05.03.2012
Сообщений: 15
19.03.2012, 13:40  [ТС] 4
если можно, скиньте какой либо проект, работающий с базой данных через TableAdapter'ы и BindingSouce'ы
0
19.03.2012, 13:40
serg42
121 / 103 / 7
Регистрация: 14.02.2010
Сообщений: 263
19.03.2012, 15:12 5
хм... У dataGridView1 источник данных settingsBankBindingSource, у settingsBankBindingSource - bindingSource1, у bindingSource1 - UkiCreditSystemDataSet. Игла в яйце, яйцо в курице, курица в утке...

Возможно при такой вложенности события нормально не обрабатываются. Попробуйте для начала задать dataGridView1 DataSource - bindingSource1.


Цитата Сообщение от yoyki Посмотреть сообщение
если можно, скиньте какой либо проект, работающий с базой данных через TableAdapter'ы и BindingSouce'ы
Я с TableAdapter-ами зарекся работать. Делаешь их за пять минут, а косяки ищешь неделями.
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,498
19.03.2012, 15:27 6
Цитата Сообщение от yoyki Посмотреть сообщение
param.SqlDbType = SqlDbType.NChar;
Здесь необходимо указать SqlDbType.Int , насколько я понял

Добавлено через 42 секунды
Цитата Сообщение от yoyki Посмотреть сообщение
where 'id'
или здесь убрать кавычки для id
0
yoyki
1 / 1 / 0
Регистрация: 05.03.2012
Сообщений: 15
19.03.2012, 16:21  [ТС] 7
Цитата Сообщение от serg42 Посмотреть сообщение
хм... У dataGridView1 источник данных settingsBankBindingSource, у settingsBankBindingSource - bindingSource1, у bindingSource1 - UkiCreditSystemDataSet. Игла в яйце, яйцо в курице, курица в утке...

Возможно при такой вложенности события нормально не обрабатываются. Попробуйте для начала задать dataGridView1 DataSource - bindingSource1.



Я с TableAdapter-ами зарекся работать. Делаешь их за пять минут, а косяки ищешь неделями.
А с чем лучше? ODBC?

Добавлено через 21 минуту
Цитата Сообщение от Learx Посмотреть сообщение
Здесь необходимо указать SqlDbType.Int , насколько я понял

Добавлено через 42 секунды

или здесь убрать кавычки для id
кавычки убирал, та же ошибка была.
А int не подходит, так как нужна строка, число может начинаться и с 0.

Добавлено через 15 минут
собственно, если кому поможет - задача в следующем. Надо редактировать настройки из текстбоксов после нажатия ентера. у меня пока только такое решение собралось. Может быть кто либо что либо посоветует по решению этой задачи
0
serg42
121 / 103 / 7
Регистрация: 14.02.2010
Сообщений: 263
19.03.2012, 17:19 8
Цитата Сообщение от yoyki Посмотреть сообщение
А с чем лучше? ODBC?
Это кому как удобнее. Но ODBC тут не причём, я имел ввиду, что не использую генерацию кода для работы с БД.

Цитата Сообщение от yoyki Посмотреть сообщение
кавычки убирал, та же ошибка была.
А int не подходит, так как нужна строка, число может начинаться и с 0.
Кавычки там не играют никакой роли. Попробуйте задавать id через параметр.
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,498
19.03.2012, 17:41 9
adapter проходит по строчкам DataTable и в зависимости от RowStatus использует или Update или Insert.
UpdateCommand и InsertCommand криво генерятся автоматически.
выхода тут два:
1.ручками писать UpdateCommand и InsertCommand указывая SourceColemn в параметрах
2. самому проходить по строчками и выполнять необходимые команды - более гибкий способ так как в зависимости от данных можно выполнять сколько угодно и какие угодно команды.
0
yoyki
1 / 1 / 0
Регистрация: 05.03.2012
Сообщений: 15
19.03.2012, 20:12  [ТС] 10
Цитата Сообщение от Learx Посмотреть сообщение
1.ручками писать UpdateCommand и InsertCommand указывая SourceColemn в параметрах
2. самому проходить по строчками и выполнять необходимые команды - более гибкий способ так как в зависимости от данных можно выполнять сколько угодно и какие угодно команды.
знать бы как...

Добавлено через 32 минуты
Слава будде.
Заполнение DataGridView из Textbox
>.<
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,498
19.03.2012, 20:19 11
UpdateCommand и InsertCommand для адаптера:
C#
1
2
3
4
5
6
7
8
9
10
11
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlDataAdapter ada = new SqlDataAdapter();
ada.UpdateCommand = new Sql Command(@"Update MyTable Set Field1=@F1 where Id=@Id", conn);
ada.UpdateCommand.Parameters.Add("@F1", SqlDbType.NVarChar).SourceColumn = "Field1";
ada.UpdateCommand.Parameters.Add("@Id", SqlDbType.Int).SourceColumn = "Id";
ada.InsertCommand= new Sql Command(@"Insert Into MyTable Vulues (@F1)", conn);
ada.InsertCommand.Parameters.Add("@F1", SqlDbType.NVarChar).SourceColumn = "Field1";
ada.InsertCommand.Parameters.Add("@Id", SqlDbType.Int).SourceColumn = "Id";
ada.Update(MyDataSet, "MyTable");
}
работаем со строками:
C#
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
using (SqlConnection conn = new SqlConnection(connectionString))
{
string qiury1= "...";
string qiury2= "...";
string qiury3= "...";
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
foreach(DataRow row in MyDataSet.Tables["MyTable"].Rows)
{
if(...) 
{
comm.CommandText = query1;
comm.Parameters["ParName"].Value = row["Field1"];
comm.ExecuteNonQuery();
continue;
}
if(...) 
{
comm.CommandText = query2;
comm.Parameters["ParName"].Value = row["Field1"];
comm.ExecuteNonQuery();
continue;
}
if(...) 
{
comm.CommandText = query3;
comm.Parameters["ParName"].Value = row["Field1"];
comm.ExecuteNonQuery();
}
}
}
P.S. При работе со строками лучше все завернуть в транзакцию.
1
19.03.2012, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2012, 20:19

Ошибка CS0102 Тип "PHONE" уже содержит определение для "ID"
Решил построить отчет, но при запуске выводит ошибку.

Как исправить ошибку ""Ссылки на тип "Component" требует его определения в "System", но его не удалось найти"?
using System; using System.Collections.Generic; using System.Data.OleDb; using System.Linq;...

Ошибка "База данных уже существует". При отсутствии базы данных
День добрый! Помогите, пожалуйста, разобраться с проблемой. Есть довольно простой код,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru