Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум .NET > Форум Visual Basic .NET
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 11.03.2011, 16:16   #1
Dzhej-Dzhej
Заблокирован
 
Регистрация: 29.07.2010
Сообщений: 4,694
Репутация: 2865 (1017)
Лучшие ответы: 29
Как проверить наличие записи в таблице БД MySql(по ID) / Visual Basic .NET

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

Есть таблица в БД MySql в ней неопределенное количество записей(строк)
Записи я периодически обновляю примерно так:
Код Visual Basic .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, если нету - создавать
Пытаюсь сделать следующим образом:
Код Visual Basic .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.
Так вот, может кто подскажет как мне это нормально организовать

Зараннее благодарен
Старый 11.03.2011, 17:07   #2
gitarillo
Форумчанин
 
Аватар для gitarillo
 
Регистрация: 17.06.2010
Сообщений: 990
Репутация: 546 (475)
Записей в блоге: 1
Лучшие ответы: 7
Как проверить наличие записи в таблице БД MySql(по ID)

Dzhej-Dzhej
Код Visual Basic .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
В принципе суть та же что и тебя. Но работает нормально
Другие темы раздела Форум программистов Visual Basic .NET. Программирование с использованием Visual Basic .NET
Visual Basic .NET Простенькая анимация
Пытаюсь написать программу, при включении которой, шарик начинает двигаться по форме и отскакивать от стенок. Для того чтобы сзодать движение пытаюсь обработать событие Timer_Tick Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ...
Visual Basic .NET Событие на еще несозданный объект
Как прописать событие на объект, который будет создан в процессе выполнения программы? Public Sub Label1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.Click .... End Sub - так не работает, т.к. объекта еще нет.
Старый 12.03.2011, 11:13  [ТС]   #3
Dzhej-Dzhej
Заблокирован
 
Регистрация: 29.07.2010
Сообщений: 4,694
Репутация: 2865 (1017)
Лучшие ответы: 29
Как проверить наличие записи в таблице БД MySql(по ID)

gitarillo, спасибо.
Дело в том, что если у меня будет нехватать десяток записей, то коннектиться и разрывать коннект десять раз как-то нехорошо.
rem ID будет подсовываться динамически из инишника описаний.

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

Добавлено через 2 часа 28 минут
вроде получилось(слабонервных просьба не читать, разрыв мозга во второй строке)
Код Visual Basic .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
Старый 12.03.2011, 11:55   #4
Eugene22
Форумчанин
 
Регистрация: 28.10.2009
Сообщений: 4,030
Репутация: 2264 (1137)
Лучшие ответы: 43
Как проверить наличие записи в таблице БД MySql(по ID)

Чуть модифицированный вариант :
Код Visual Basic .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() -возвращает количество записей и этим можно воспользоваться
Старый 12.03.2011, 11:55
Google
Объявления
Старый 12.03.2011, 12:18  [ТС]   #5
Dzhej-Dzhej
Заблокирован
 
Регистрация: 29.07.2010
Сообщений: 4,694
Репутация: 2865 (1017)
Лучшие ответы: 29
Как проверить наличие записи в таблице БД MySql(по ID)

Цитата Сообщение от Eugene22 Посмотреть сообщение
ExecuteNonQuery() -возвращает количество записей и этим можно воспользоваться
ExecuteNonQuery возвращает количество записей, которые изменены, например, апдейтом.

следующий код выдает "-1", хоть есть у меня запись, хоть нету
Код Visual Basic .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)
Старый 12.03.2011, 14:39   #6
Eugene22
Форумчанин
 
Регистрация: 28.10.2009
Сообщений: 4,030
Репутация: 2264 (1137)
Лучшие ответы: 43
Как проверить наличие записи в таблице БД MySql(по ID)

Да, немного ошибся, видимо количество записей, отвечающих выборке "SELECT", можно проверить только через DataReader, как-нибудь так
Код Visual Basic .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
Старый 12.03.2011, 15:03  [ТС]   #7
Dzhej-Dzhej
Заблокирован
 
Регистрация: 29.07.2010
Сообщений: 4,694
Репутация: 2865 (1017)
Лучшие ответы: 29
Как проверить наличие записи в таблице БД MySql(по ID) / Visual Basic .NET

я сделал, как в посте #3
мне чем меньше строк и переменных, тем лучше, т.к. размер проги уже приближается к 2000 строкам

всем спасибо, тему можно закрывать
Старый 12.03.2011, 15:03
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
MySQL Как проверить таблицу на наличие записи
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...
Micro
MS Access Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
Есть таблица( в базе "БонусВзыск") в эту таблицу мне нужно записывать данные из двух других (Взыск_планки, Прем_планки). Связь типа . Возникает проблема,при попытке внести записи в таблицу БонусВзыск вылазиет ошибка . Данные в таблицы Взыск_планки и Прем_планки уже внесены, но пополнение таблицы...
slava.val
MS Access Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице
Добрый день, помоготе пожалуйста разобрать в чем проблема, в базе при вводе данных через форму "Субъекты" выдает сообщение Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице "субъекты", но при редактировании данных никаких...
NAZE
Visual Basic .NET Как проверить таблицу на наличие записи
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...
Micro
VBA поле проверить на наличие в таблице
Здравствуйте как правильно поле проверить на наличие в таблице используя ???.Information(wdWithInTable) = True Then Beep Как праавильно объявить и проверить?? Спасибо Без Option Exрlitic как я знаю, как с ним, ругается однако?? Добавлено через 41 минуту что касается полей, еще подскажите,...
Ципихович Эндрю
Опции темы

Текущее время: 18:43. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.