2017-02-16 3 views
0

Недавно я кодировал систему продажи точек в моей системе, когда люди, работающие в магазине, пытаются ввести новый продукт в базу данных, они должны выбрать, является ли продукт частью, если это напиток должен быть L (литр), если это овощи, такие как груши, яблоки (KG) килограммы. Я создал наконечник имен строк (тип), но я получаю сообщение об ошибке, но не каждый раз, когда я вставляю продукт, этот тип появляется.Значения combobox в vb.net

Вот мой код:

konekcija = New MySqlConnection 
    konekcija.ConnectionString = 
     "server=localhost;userid=root;password=1234;database=baza;port=3307" 
    Dim READER As MySqlDataReader 
    Dim kupovnacena As Double 
    Dim prodaznacena As Double 
    Dim kolicina As Double 
    Dim profit As Double 
    Dim ddv As Double 
    Dim mkpr As String 
    Dim edmerka As String 
If ComboBox3.SelectedIndex = 1 Then 


      edmerka = "парче" 


     End If 
     If ComboBox3.SelectedIndex = 2 Then 


      edmerka = "кг" 


     End If 
     If ComboBox3.SelectedIndex = 3 Then 


      edmerka = "мг" 


     End If 
     If ComboBox3.SelectedIndex = 4 Then 


      edmerka = "Л" 


     End If 

COMMAND.Connection = konekcija 

     COMMAND.CommandText = "INSERT INTO baza.artikli VALUES(@kod,@naziv,@nabavna,@prodazna,@ddv,@kolicina,@opis,@opis2,@mkproizvod,@profit,@proizvoditel,@edmerka)" 
     COMMAND.Prepare() 



     COMMAND.Parameters.AddWithValue("@kod", TextBoxBarkod.Text) 
     COMMAND.Parameters.AddWithValue("@naziv", TextBoxNaziv.Text) 
     COMMAND.Parameters.AddWithValue("@nabavna", TextBoxKupovna.Text) 
     COMMAND.Parameters.AddWithValue("@prodazna", TextBoxProdazna.Text) 
     COMMAND.Parameters.AddWithValue("@ddv", ddv) 
     COMMAND.Parameters.AddWithValue("@kolicina", TextBoxKolicina) 
     COMMAND.Parameters.AddWithValue("@opis", TextBoxOpis.Text) 
     COMMAND.Parameters.AddWithValue("@opis2", TextBoxOpis2.Text) 
     COMMAND.Parameters.AddWithValue("@mkproizvod", mkpr) 
     COMMAND.Parameters.AddWithValue("@profit", profit) 
     COMMAND.Parameters.AddWithValue("@proizvoditel", TextBoxProizvoditel.Text) 
     COMMAND.Parameters.AddWithValue("@edmerka", edmerka) 


     COMMAND.ExecuteNonQuery() 
+0

Используйте параметры и используйте 'COMMAND.ExecuteNonQuery()'. Вы делаете вставку, поэтому вам не нужен «ЧИТАТЕЛЬ». – Bugs

+0

Вы уязвимы для SQL-инъекций. Используйте [параметризованные запросы] (https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html). – Ryan

+0

Я не прошу о помощи в моей вставке данных, он отлично работает, программное обеспечение используется на локальном компьютере, не подключенном к Интернету, и данные не являются секретными. – Trajkovski

ответ

0

Может быть, вы должны проверить, если выбранный индекс равен 0:
If ComboBox3.SelectedIndex = 0 Then edmerka = "something" End If

1

не прописывать код тому подобное ... И использовать SelectedItem свойство Combo Boxes.

Создайте структуру для хранения элементов опций ComboBox.

Private Structure ListItem 
     Public Value As String 
     Public Name As String 
     Public Sub New(New_Name As String, New_Value As String) 
      Value = New_Value 
      Name = New_Name 
     End Sub 
     Public Overrides Function ToString() As String 
      Return Name 
     End Function 
    End Structure 

Затем, где вы инициализируете поле со списком, используйте следующее.

ComboBox3.Items.Add(New ListItem("Whatever", "парче")) 
    ComboBox3.Items.Add(New ListItem("This", "кг")) 
    ComboBox3.Items.Add(New ListItem("Means", "мг")) 
    etc. 

Затем в подпрограмме просто использовать ...

Dim edmerka As String = DirectCast(ComboBox3.SelectedItem, ListItem).Value 

Если деталь 0 что-то вроде «Пожалуйста, выберите», то вам нужно будет добавить первый элемент со значением вы можете испытать для. Затем проверьте его после указанной выше строки.

ComboBox3.Items.Add(New ListItem("Whatever", "")) 'Added before the others 

If emberka ="" then 
    'warn user and exit sub 
end if 

ТАКЖЕ

Как уже упоминалось, использование Paramaters в запросе, так что вы не подвержены SQL вставки. Это может быть закрытая офисная ситуация, но НЕ ДОЛЖЕН недооценивать последствия проблемы безопасности ... Недовольные сотрудники могут вызвать хаос.

+2

Вы должны использовать 'DirectCast' или' TryCast', а не 'CType'. Последний должен использоваться только тогда, когда вы хотите конвертировать из другого типа, и у вас есть определенные операторы преобразования. –

+1

Спасибо за подсказку @VisualVincent. Я использую CType, потому что, если я просто попытаюсь назначить его без какого-либо преобразования, IDE предложит мне использовать метод cType. Я подумал ... ну если вы так скажете ... LOL. В этом случае я думаю, что CType достаточно, так как я знаю, что такое источник. Но, тем не менее, хорошая точка зрения. –

+1

'В этом случае я думаю, что CType достаточно, так как я знаю, что такое источник. - Хотя это когда вы знаете, что источник, что вы должны использовать' Try-/DirectCast'. ;) –

Смежные вопросы