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

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

Зараннее благодарен
AdAgent
Объявления
11.03.2011, 16:16     Как проверить наличие записи в таблице БД MySql(по ID)
gitarillo
Форумчанин
555 / 484 / 8
Регистрация: 17.06.2010
Сообщений: 991
Записей в блоге: 1
11.03.2011, 17:07     Как проверить наличие записи в таблице БД MySql(по ID)   #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
В принципе суть та же что и тебя. Но работает нормально
Dzhej-Dzhej
Заблокирован
12.03.2011, 11:13  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #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
Eugene22
_
2302 / 1174 / 46
Регистрация: 28.10.2009
Сообщений: 4,203
12.03.2011, 11:55     Как проверить наличие записи в таблице БД MySql(по ID)   #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() -возвращает количество записей и этим можно воспользоваться
Dzhej-Dzhej
Заблокирован
12.03.2011, 12:18  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #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)
Eugene22
_
2302 / 1174 / 46
Регистрация: 28.10.2009
Сообщений: 4,203
12.03.2011, 14:39     Как проверить наличие записи в таблице БД MySql(по ID)   #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2011, 15:03     Как проверить наличие записи в таблице БД MySql(по ID)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Dzhej-Dzhej
Заблокирован
12.03.2011, 15:03  [ТС]     Как проверить наличие записи в таблице БД MySql(по ID)   #7
я сделал, как в посте #3
мне чем меньше строк и переменных, тем лучше, т.к. размер проги уже приближается к 2000 строкам

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

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