2017-02-16 6 views
0

最近、店舗で働く人々がデータベースに新製品を入力しようとしたときに、システムでPoint of saleシステムをコーディングしていました。梨のような野菜であれば飲み物はL(リットル)、リンゴ(KG)のキログラムでなければなりません。私は文字列の名前のtip(型)を作成しましたが、エラーが出ます。タイプが表示される製品を挿入するたびにではありません。ここで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 

次に、コンボボックスを初期化する場所は次のとおりです。項目0は、その後、あなたがのためにテストすることができる値で最初の項目を追加する必要があります「を選択してください」のようなものであれば

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 

を使用しています。上記の行の後にテストしてください。

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

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

ALSO

他の人が述べたように、あなたはSQLの挿入を受けないように、クエリで使用PARAMATERS。それは閉鎖されたオフィスの状況かもしれませんが、セキュリティの問題の影響を過小評価しないでください... 不満を持った従業員は大混乱を引き起こす可能性があります。

+2

'CType'ではなく' DirectCast'や 'TryCast'を使うべきです。後者は、別のタイプから変換し、変換演算子を定義する場合にのみ使用してください。 –

+1

チップ@VisualVincentをありがとう。 CTypeを使用するのは、変換せずに割り当てようとすると、IDEからcTypeメソッドを使用するように要求されるからです。私はあなたがそう言っていればいいと思った... LOL。この場合、私はソースが何であるかを知っているので、CTypeは十分だと思います。しかし、良い点も少ないです。 –

+1

'この場合、私はソースが何であるか知っているのでCTypeは十分だと思います - あなたが' Try-/DirectCast'を使っているソースが分かっています。 ;) –

関連する問題