2017-02-16 85 views
0

最近我编写了一个销售点系统,在我的系统中,当在商店工作的人试图在数据库中输入新产品时,他们应该选择产品是否是件如果它是如果是像梨,苹果(KG)千克这样的蔬菜,饮料应该是L(升)。我创建了一个字符串名称提示(类型),但我得到一个错误,不是每次我插入产品的类型出现。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()'。你正在做一个插入,所以你不需要'READER'。 – 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属性。

创建一个结构来保存您的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 

ALSO

正如其他人所说,使用PARAMATERS在您的查询,所以你不容易受到SQL插入。这可能是一个封闭的办公室的情况,但不要低估安全问题的影响... 心怀不满的员工可能会造成严重破坏。

+2

您应该使用'DirectCast'或'TryCast'而不是'CType'。只有当你想从其他类型转换并且你已经定义了转换操作符时才应该使用后者。 –

+1

感谢提示@VisualVincent。我使用CType,因为如果我只是试图分配它而没有任何转换,IDE会提示我使用cType方法。我想......如果你这么说......大声笑。在这种情况下,我认为CType是足够的,因为我知道源是什么。但是,无论如何,好的一点是。 –

+1

'在这种情况下,我认为CType是足够的,因为我知道源代码是什么 - 尽管它是当你知道你应该使用Try-/DirectCast的来源是什么时。 ;) –