Форум программистов, компьютерный форум CyberForum.ru
С наступающим Новым годом!
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Dzhej-Dzhej
Заблокирован
11.03.2011, 16:16     Как проверить наличие записи в таблице БД MySql(по ID)   #1
Всем доброго времени суток.
Уважаемые программисты, у меня возник такой вопрос:

Есть таблица в БД 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.
Так вот, может кто подскажет как мне это нормально организовать

Зараннее благодарен
AdAgent
Объявления
11.03.2011, 16:16     Как проверить наличие записи в таблице БД MySql(по ID)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 16:16     Как проверить наличие записи в таблице БД MySql(по ID)
Посмотрите здесь:

Visual Basic .NET Отображение всех имен, как список в таблице mysql
Visual Basic .NET Проверить наличие файла в папке или на диске
Visual Basic .NET Как проверить таблицу на наличие записи
Visual Basic .NET MS Sql: при добавлении новой записи, информация из первой записи в таблице исчезает
Visual Basic .NET Создание записи в таблице SQlite
Visual Basic .NET Как узнать ID добавленной записи? (MySql)
Visual Basic .NET Проверить наличие файлов Visual Basic (Сервис)
Visual Basic .NET Проверить наличие запятых в тексте и заменить запятые точками

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

Поиск по форуму:
gitarillo
Форумчанин
554 / 483 / 8
Регистрация: 17.06.2010
Сообщений: 991
Записей в блоге: 1
11.03.2011, 17:07     Как проверить наличие записи в таблице БД MySql(по ID)   #2
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
В принципе суть та же что и тебя. Но работает нормально
Dzhej-Dzhej
Заблокирован
12.03.2011, 11:13  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #3
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
Eugene22
_
2282 / 1155 / 43
Регистрация: 28.10.2009
Сообщений: 4,120
12.03.2011, 11:55     Как проверить наличие записи в таблице БД MySql(по ID)   #4
Чуть модифицированный вариант :
Код 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() -возвращает количество записей и этим можно воспользоваться
Dzhej-Dzhej
Заблокирован
12.03.2011, 12:18  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #5
Цитата Сообщение от 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)
Eugene22
_
2282 / 1155 / 43
Регистрация: 28.10.2009
Сообщений: 4,120
12.03.2011, 14:39     Как проверить наличие записи в таблице БД MySql(по ID)   #6
Да, немного ошибся, видимо количество записей, отвечающих выборке "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
Dzhej-Dzhej
Заблокирован
12.03.2011, 15:03  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #7
я сделал, как в посте #3
мне чем меньше строк и переменных, тем лучше, т.к. размер проги уже приближается к 2000 строкам

всем спасибо, тему можно закрывать
Yandex
Объявления
12.03.2011, 15:03     Как проверить наличие записи в таблице БД MySql(по ID)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика