Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 5.00
Dzhej-Dzhej
Заблокирован
#1

Как проверить наличие записи в таблице БД MySql(по ID) - Visual Basic .NET

11.03.2011, 16:16. Просмотров 3270. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток.
Уважаемые программисты, у меня возник такой вопрос:

Есть таблица в БД MySql в ней неопределенное количество записей(строк)
Записи я периодически обновляю примерно так:
vb.net
1
2
3
4
5
'Dim cmd As New MySql.Data.MySqlClient.MySqlCommand
...
cmd.CommandText = "UPDATE table ... WHERE id = " & tDat.id
cmd.Prepare()
cmd.ExecuteNonQuery()
Здесь все нормально и подключение, и обновление, и др.

При старте программы необходимо проверять есть ли записи с некоторыми id, если нету - создавать
Пытаюсь сделать следующим образом:
vb.net
1
2
3
4
5
6
7
8
9
        cmd.CommandText = "select * from table where id = 80;"
        cmd.Prepare()
        cmd.ExecuteNonQuery()
        If (Not cmd.ExecuteReader().HasRows) Then
            'cmd.ExecuteReader().Close()
            cmd.CommandText = "INSERT INTO table VALUES( 80, '', 0, 0, 0, '', '', '', '', '', '');"
            cmd.Prepare()
            cmd.ExecuteNonQuery()
        End If
а он мне отвечает на строке 8 cmd.ExecuteNonQuery():
There is already an open DataReader associated with this Connection which must be closed first.
Так вот, может кто подскажет как мне это нормально организовать

Зараннее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как проверить наличие записи в таблице БД MySql(по ID) (Visual Basic .NET):

Как проверить таблицу на наличие записи - Visual Basic .NET
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...

SQL Insert/Update: Для обеспечения целостности данных необходимо наличие связанной записи в таблице - Visual Basic .NET
Доброго времени суток, товарищи. Пытаюсь добавить новую запись, либо обновить существующую, но валится ошибка: "Невозможно добавление...

Как проверить существование текстового документа и наличие в нем текста? - Visual Basic .NET
Требуется проверить существование текстового файла по указанному пути вместе с определенным текстом. Данный код не работает: ...

Как проверить в TextBox наличие подряд идущих одинаковых символов? - Visual Basic .NET
Есть строка в TextBox необходимо проверить повторы символов от n раз и более. То есть допустим нужно ответить на вопрос есть ли в данной...

Отображение всех имен, как список в таблице mysql - Visual Basic .NET
Доброго времени суток Dim Conect As String = "server=******;User Id=****;password=*****;Persist Security Info=True;database=*****" ...

Проверить наличие записи в таблице и добавить его при отсутствии - SQL Server
Дано две таблицы: Если в таблице 1 нет такого же id как в таблице 2, то необходимо этот id добавить в таблицу 1. Добавлено через 20...

6
gitarillo
720 / 520 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
11.03.2011, 17:07 #2
Dzhej-Dzhej
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class Form1
    Dim sql_con As New MySql.Data.MySqlClient.MySqlConnection
    Dim datbl As New System.Data.DataTable
    Dim sql As String
    Dim cmd As MySql.Data.MySqlClient.MySqlCommand
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        sql_con.ConnectionString = "Server=localhost; User id=USER;password=***;database=LLL"
        sql = "SET NAMES cp1251; SELECT *  FROM   `tbname` WHERE (`ID`='20')"
        sql_con.Open()
        cmd = New MySql.Data.MySqlClient.MySqlCommand(sql, sql_con)
        cmd.ExecuteNonQuery()
        datbl.Clear()
        Dim reader As New MySql.Data.MySqlClient.MySqlDataAdapter(cmd)
        reader.Fill(datbl)
        sql_con.Close()
        If datbl.Rows.Count = 0 Then
            sql = "INSERT INTO `tbname`   (`N1`, `N2`, `N3`, `N4`) VALUES ('111', '30', '20', '02')"
            sql_con.Open()
            cmd = New MySql.Data.MySqlClient.MySqlCommand(sql, sql_con)
            cmd.ExecuteNonQuery()
            sql_con.Close()
        End If
В принципе суть та же что и тебя. Но работает нормально
1
Dzhej-Dzhej
Заблокирован
12.03.2011, 11:13  [ТС] #3
gitarillo, спасибо.
Дело в том, что если у меня будет нехватать десяток записей, то коннектиться и разрывать коннект десять раз как-то нехорошо.
rem ID будет подсовываться динамически из инишника описаний.

Может есть какой-либо способ проверять наличие записи(и создавать несуществующую) без разрывов коннекта?

Добавлено через 2 часа 28 минут
вроде получилось(слабонервных просьба не читать, разрыв мозга во второй строке)
vb.net
1
2
3
4
5
6
7
8
9
        Dim id As Integer = 80
        cmd.CommandText = "select id from table where id = " + id.ToString + ";"
        cmd.Prepare()
        cmd.ExecuteNonQuery()
        If (id <> cmd.ExecuteScalar()) Then
            cmd.CommandText = "INSERT INTO table VALUES( " + id.ToString + ", '', 0, 0, 0, '', '', '', '', '', '');"
            cmd.Prepare()
            cmd.ExecuteNonQuery()
        End If
2
Eugene22
_
2343 / 1215 / 60
Регистрация: 28.10.2009
Сообщений: 4,351
12.03.2011, 11:55 #4
Чуть модифицированный вариант :
vb.net
1
2
3
4
5
6
7
8
9
10
 Dim id As Integer = 80
        cmd.CommandText = "select id from table where id = " + id.ToString + ";"
        If cmd.ExecuteNonQuery() = 0 Then
            cmd.CommandText = "INSERT INTO table VALUES( " + id.ToString + ", '', 0, 0, 0, '', '', '', '', '', '');"
            If comand1.ExecuteNonQuery() > 0 Then
                MessageBox.Show("INSERT-command has been executed")
            Else
                MessageBox.Show("INSERT-command failed")
            End If
        End If
ExecuteNonQuery() -возвращает количество записей и этим можно воспользоваться
1
Dzhej-Dzhej
Заблокирован
12.03.2011, 12:18  [ТС] #5
Цитата Сообщение от Eugene22 Посмотреть сообщение
ExecuteNonQuery() -возвращает количество записей и этим можно воспользоваться
ExecuteNonQuery возвращает количество записей, которые изменены, например, апдейтом.

следующий код выдает "-1", хоть есть у меня запись, хоть нету
vb.net
1
2
3
4
                        cmd.CommandText = "select id from table where id = 80;"
                        cmd.Prepare()
                        Dim q As Integer = cmd.ExecuteNonQuery()
                        MessageBox.Show(q.ToString)
0
Eugene22
_
2343 / 1215 / 60
Регистрация: 28.10.2009
Сообщений: 4,351
12.03.2011, 14:39 #6
Да, немного ошибся, видимо количество записей, отвечающих выборке "SELECT", можно проверить только через DataReader, как-нибудь так
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim id As Integer = 80
        cmd.CommandText = "select id from table where id = " + id.ToString + ";"
        Dim dataReader As MySqlDataReader = comand1.ExecuteReader()
        If dataReader.Read() = False Then
            dataReader.Close()
            cmd.CommandText = "INSERT INTO table VALUES( " + id.ToString + ", '', 0, 0, 0, '', '', '', '', '', '');"
            If comand1.ExecuteNonQuery() > 0 Then
                MessageBox.Show("INSERT-command has been executed")
            Else
                MessageBox.Show("INSERT-command failed")
            End If
       Else
            MessageBox.Show("Запись уже есть")
        End If
1
Dzhej-Dzhej
Заблокирован
12.03.2011, 15:03  [ТС] #7
я сделал, как в посте #3
мне чем меньше строк и переменных, тем лучше, т.к. размер проги уже приближается к 2000 строкам

всем спасибо, тему можно закрывать
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2011, 15:03
Привет! Вот еще темы с ответами:

Как проверить таблицу на наличие записи - MySQL
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...

Как проверить массив на наличие имен с базы mysql - PHP БД
У меня есть база в mysql names, состоящая из 30 имен, и есть массив massnames, в котором 5 имен. Как сделать, чтобы данные с базы смерялись...

Как проверить наличие записи В ПОДЧИНЕННОЙ ФОРМЕ - MS Access
привет всем ... Мне нужно по нажатию на кнопку &quot;новая запись&quot; , в форме &quot;F_Работник&quot; проверить наличие записи В ...

Как проверить наличие записи В ПОДЧИНЕННОЙ ФОРМЕ - MS Access
привет всем ... Как проверить наличие записи В ПОДЧИНЕННОЙ ФОРМЕ с помощью Recordset.EOF Мне нужно по нажатию на кнопку...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
12.03.2011, 15:03
Ответ Создать тему
Опции темы

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