mysql

2016-04-04 20 views
-2

vb.net içinde geçerli bir arama parametresi olarak geçerli tarihi kullanıyorum Güncel veritabanına ve geçerli tarihe göre veritabanımı sorgulamaya çalışıyorum. Şu anda sorgumdan bir sonuç alamıyorum ve bence sorun şu anki günümüzün formatını formatlamaktır. olarak sorgumysql

query = "SELECT movie_name from movie2 Where movie_id=(SELECT movie_id from rental where client_username='" & currentUser & "' AND start_date<='" & Format(Now, "yyyy-MM-dd") & "' AND return_date>='" & Format(Now, "yyyy-MM-dd") & "')" 

Ben sorgunun geri kalanı ben mySql sunucuda test ettik olarak (CurrentUser çağırarak hariç) çalışır olduğunu biliyoruz. Daha önce herhangi bir güçlük olmadan bir modülde bir değişkenle kaydedilen currentUser'i aradım, bu yüzden problemin benim tarihlerimle olması gerektiğini hissediyorum. Geçerli tarihi nasıl biçimlendireceğimi bilmiyorum, böylece mySql düzgün şekilde alacaktır? Ben de hiçbir başarı ile kod

query = "SELECT movie_name from movie2 Where movie_id=(SELECT movie_id from rental where client_username='" & currentUser & "' AND start_date<='" & DateTime.Now.ToString("yyyy-MM-dd") & "' AND return_date>='" & DateTime.Now.ToString("yyyy-MM-dd") & "')" 

çalıştık. Herhangi bir yardım büyük takdir edilecektir! Teşekkürler, Alan.

+1

Evet sayesinde, ancak sorun bir parameterzied sorgu – Steve

cevap

3

Sorun, sql komutu oluştururken dize birleştirme kullanmak için olağan şekilde kötü bir uygulamadır.
Ve çare her zaman aynıdır. Parametreli bir sorgu. dizisi birleştirme ile

query = "SELECT movie_name from movie2 Where movie_id=" & _ 
     "(SELECT movie_id from rental where [email protected]" &_ 
     " AND start_date<[email protected] AND return_date>[email protected]" 
Using cmd = new MySqlCommand(query, connection) 
    cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = currentUser 
    cmd.Parameters.Add("@date", MySqlDbType.DateTime).Value = DateTime.Now 
    Using reader = cmd.ExecuteReader() 
     .... now read your data .... 
    End Using 
End Using 

Eğer Sql Injection karşı savunmasız ve bir dizeye ondalık veya tarih dönüşümünü zorlayarak zaman yanlış dönüşümlerin kolay bir kurban vardır. bu yüzden oldukça MySqlDataAdapter kullanıyordum bir veri çerçevesi aracılığıyla verilerini göstermek istediğiniz bir MySqlDataAdapter

query = "SELECT movie_name from movie2 Where movie_id=" & _ 
     "(SELECT movie_id from rental where [email protected]" &_ 
     " AND start_date<[email protected] AND return_date>[email protected]" 
Using cmd = new MySqlCommand(query, connection) 
    cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = currentUser 
    cmd.Parameters.Add("@date", MySqlDbType.DateTime).Value = DateTime.Now 
    Using adapter = new MySqlDataAdapter(cmd) 
     Dim dt = new DataTable() 
     adapter.Fill(dt) 
    End Using 
End Using 
+0

kullanılarak sabitlenebilir shoul: Parametreler o

EDIT tüm önlemek Bir okuyucudan, bunu yapmak için kodu nasıl değiştiririm? –

+0

Bu durumda, bir MySqlCommoner alan ve MySqlDataReader – Steve

+1

kullanarak/oluşturmak yerine yukarıda hazırlanan komutu geçiren MySqlDataAdapter yapıcısını kullanabilirsiniz. Bu bana yardımcı oldu! Teşekkürler @Steve .. – matzone