Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
11.03.2011, 16:16   #1
Dzhej-Dzhej
Нарушитель
2871 / 1023 / 30
Регистрация: 29.07.2010
Сообщений: 4,761
Как проверить наличие записи в таблице БД 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, 16:16
AdAgent
Объявления
11.03.2011, 17:07   #2
gitarillo
Форумчанин
549 / 478 / 7
Регистрация: 17.06.2010
Сообщений: 990
Записей в блоге: 1
Как проверить наличие записи в таблице БД 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 Простенькая анимация
Пытаюсь написать программу, при включении которой, шарик начинает двигаться по форме и отскакивать от стенок. Для того чтобы сзодать движение пытаюсь обработать событие 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
Нарушитель
2871 / 1023 / 30
Регистрация: 29.07.2010
Сообщений: 4,761
Как проверить наличие записи в таблице БД 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
_
2273 / 1146 / 42
Регистрация: 28.10.2009
Сообщений: 4,112
Как проверить наличие записи в таблице БД 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, 12:18  [ТС]   #5
Dzhej-Dzhej
Нарушитель
2871 / 1023 / 30
Регистрация: 29.07.2010
Сообщений: 4,761
Как проверить наличие записи в таблице БД 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
_
2273 / 1146 / 42
Регистрация: 28.10.2009
Сообщений: 4,112
Как проверить наличие записи в таблице БД 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
Нарушитель
2871 / 1023 / 30
Регистрация: 29.07.2010
Сообщений: 4,761
Как проверить наличие записи в таблице БД MySql(по ID) / Visual Basic .NET

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

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

Похожие темы
Тема Раздел Автор Дата
Delphi БД Как программно проверить наличие MySQL Connector в системе?
Приложение работает с базой MySQL через MySQL Connector/ODBC v5.2. Необходимо при запуске проверить установлен ли он в системе, какая версия и так далее. С чего начать даже не пойму. Единственная зацепка: копать реестр... Может кто знает более "правильные" методы? Добавлено через 26 минут...
Delphi и базы данных KMSNasgool 25.12.2013 11:38
MySQL Как проверить таблицу на наличие записи
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...
MySQL Micro 26.04.2013 20:56
Visual Basic .NET MS Sql: при добавлении новой записи, информация из первой записи в таблице исчезает
Ошибка заключается в том, что при добавлении новой записи(через программу), информация из первой записи в таблице исчезает. При добавлении последующих ничего не происходит, но если отредактировать первую запись, заполнив её, при добавлении новой, опять информация исчезает. Изначально все работало...
Visual Basic .NET Gnom1990 03.07.2012 14:35
Visual Basic .NET Как проверить таблицу на наличие записи
Делаю отдельную регистрацию, подскажите как проверять не занят ли логин другим человеком с учетом регистра...
Visual Basic .NET Micro 29.02.2012 12:48
Visual Basic .NET Отображение всех имен, как список в таблице mysql
Доброго времени суток Dim Conect As String = "server=******;User Id=****;password=*****;Persist Security Info=True;database=*****" Dim sqlConect As New MySql.Data.MySqlClient.MySqlConnection(Conect) Dim sql3 As New MySql.Data.MySqlClient.MySqlCommand("SELECT name FROM players",...
Visual Basic .NET ByRuNdUk 18.12.2011 11:57
Опции темы

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

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