Глюк с INSERT INTO в VB2005 (C# на ура)

Форум посвящён работе с базами данных в .NET.

Модератор: Ramzes

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Глюк с INSERT INTO в VB2005 (C# на ура)

Сообщение Thomas » 13.12.2006 (Ср) 15:34

Приветствую всех.
Прошу гуру в VB.NET обьяснить в чём проблема с командой "INSERT INTO ..."

Ситуация:
есть БД Access;
таблица (пустая) с полями типа Long и 3xString (4-ре поля)
надо программно заполнить таблицу значениями.
Код на C# работает без вопросов:
Код: Выделить всё

private void btnMaak_Click(object sender, EventArgs e)
        {
            int i;
            long setID;
            string setcode, setnaam, varia, sql;
            for (i = 1; i < 6; i++)
            {
                setID = i * 111;
                setcode = "SS" + setID.ToString();
                setnaam = "Set" + setID.ToString();
                varia = setcode + setnaam;
                sql = "INSERT INTO Sets (setID, setcode, setnaam, varia) VALUES (" +
                    setID + ", '" + setcode + "', '" + setnaam + "', '" + varia + "');";
                try
                {
                    dbCon.Open();
                    dbCmd.CommandText = sql;
                    dbCmd.ExecuteNonQuery();
                    dbCon.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    dbCon.Close();
                }
            }
        }

А при попытке выполнить тоже самое в VB студия ругается на команду INSERT INTO, выдавая такое сообщение:
Conversion from string "INSERT INTO Sets (setID, setcode" to type 'Double' is not valid.
Почему ей надо конвертировать текс в 'Double' хоть убейте НЕ ПОЙМУ. Где там там 'Double'? :shock:


Код: Выделить всё

Private Sub btnMaak_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMaak.Click
        Dim i As Integer
        Dim setID As Long
        Dim setcode, setnaam, varia, sql As String
        For i = 1 To 5
            setID = i * 111
            setcode = "SS" + setID.ToString()
            setnaam = "Set" + setID.ToString()
            varia = setcode + setnaam
            sql = "INSERT INTO Sets (setID, setcode,setnaam,varia) VALUES (" _
                + setID + ", '" + setcode + "', '" + setnaam + "', '" + varia + "');"
            Try
                dbCon.Open()
                dbCmd.CommandText = sql
                dbCmd.ExecuteNonQuery()
                dbCon.Close()
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show(ex.Message)
            Finally
                dbCon.Close()
            End Try
        Next

    End Sub


Из-за этой заморочки я немогу в Базе заполнить еще несколько таблиц. Каждый раз студия выдает похожее сообщение. Сделал маленький приерчик на C# все работает на УРА.
К сожалению всю программу не возможно переписать с VB на C#.
Задание писать на VB, плюс время критично.

Поскажите, что такого особенного в VB, чего я в данном случае не знаю. :oops:

Да этот глюк одинаков на двух разных машинах с разными дистрибутивами виндов и студий.
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.12.2006 (Ср) 16:56

RTFM
+ :arrow: &
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 13.12.2006 (Ср) 17:14

GSerg

Просто НЕ ПРЕДСТАВЛЯЕШЬ

КАК Я ТЕБЕ БЛАГОДАРЕН!!!! :D :D :D


ЗЫ приезжай в наше Королевство, пива проставлю. А тут его более 600 сортов.
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 13.12.2006 (Ср) 21:56

Thomas, используй параметры, а не конкатенацию запросов. Это небезопасно и неправильно с точки зрения хорошего кода.

Код: Выделить всё
sql = "INSERT INTO Sets (setID, setcode, setnaam, varia) VALUES (@setID, @setcode, @setnaam, @varia)"
...
dbCmd.CommandText = sql
dbCmd.Parameters.Add("@setID", "значение какое-то");
...
dbCmd.ExecuteNonQuery()
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 13.12.2006 (Ср) 23:32

gaidar
Спасибо за совет.
Нас буржуйский препод учил параметры использовать в Stored Procedure. И если бы в этой программе использовалась БД mdf, то я бы однозначно использовалбы параметры и Stored Procedure.
В пятницу и вторник экзамен по программированию. 8)

Всего самого хорошего. :D
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1


Вернуться в ADO.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList