2016-03-22 16 views
0

Birkaç kayıt içeren bir veritabam var. Veritabanın her bir satırı, resmi kaydeden bir alana sahiptir. Datatable satırlarını bir veritabanının bir tablosuna eklemek için girdiğimde, satırın her alanı doğru şekilde kaydedilir; ancak her kayıt için, veri tabanının ilk satırındaki resim kaydedilir. Kodu takip ettim ve datatable'ın her satırındaki resimleri kaydetmeye ve kaydetmeye çalışan satırları vuruyor. VB.NET kullanıyorum ve veritabanı MS Access.Verilerin listeden MS Access veritabanına eklenmesini sağlayın, VB.NET

Benim kod şöyle görünür:

For Each dr As DataRow In dt.Rows 
    cmd.CommandText = "INSERT INTO Table1 (" & _ 
      "[ID], " & _ 
      "[Name], " & _ 
      "[BDate], " & _ 
      ……. 
      "[TelNo], " & _ 
      "[Photo]) " & _ 
     " VALUES(" & _ 
      dr("ID") & ", '" & _ 
      dr("Name") & "', " & _ 
      dr("BDate") & ", '" & _ 
      ……. 
      dr("TelNo") & "', " & _ 
      img & ")" 

    cmd.Parameters.Add(img, OleDb.OleDbType.Binary).Value = dr("Photo") 
    cmd.ExecuteNonQuery() 
Next 

cevap

1

kod sormak tam olarak ne yapar: her biri için bunu çünkü döngü içinde

, tüm alanlar veri kümesi satırdaki değerleri aşağıdaki çeşitlendiği : görüntü için hariç dr(thefield)

sadece bu çünkü: img böylece her zaman aynı resimdir.

Sen dr(image) böyle bir şey olmalı (ama o kadar basit çalışır şüphe)

+0

Thomas G. img, değeri sonraki satırdaki ifadeyle sağlandığı varsayılan bir parametredir: 'cmd.Parameters.Add (img, OleDb.OleDbType.Binary) .Value = dr ("Photo") ' Bayt dizisi verisi olduğu için dr (“Photo”) değerlerinin lilst cinsinden doğrudan kullanamıyoruz. Komut metnindeki tüm öğeler Dize tipi olmalıdır. –

0

cevabı kendim buluyorum. Sorun oldukça ince. OleDbCommands'ta, parametreler adlandırılmaz. Parametreler tarafından temsil edilir? (soru işareti). Sorgumun kod snippet'inde, img değişkeni, döngüden önceki bir ifadeyle atanan? Değerine sahiptir. Parametrelerin değeri, görünümlerinin sırasına göre sağlanmalıdır. Benim durumda, sadece tek bir parametre vardır ve ben deyimi ile tek bir parametre sağlar:

cmd.Parameters.Add(img, OleDb.OleDbType.Binary).Value = dr("Photo") 

Ancak döngünün her tekrarında, başka parametre eklenecektir. İkinci kayıt için, parametrenin gerçek değeri ikinci parametre olacaktır, üçüncü kaydın değeri üçüncü sırada vb. Olacaktır. OleDbCommands'ta parametreler için değerler, siparişleri tarafından tanımlandığından ve yalnızca bir parametre olduğundan Benim durumumda, önce sağlanan resim (yani ilk kaydın) her zaman kullanılır. 'Var; her tekrarında tek bir parametre sağlayabilir nasıl' Dolayısıyla soru aşağı kaynar Ve cevap bu değerli bildiri ekleyerek her yineleme tarafından eklenen parametreyi kaldırmaktır:

cmd.Parameters.Clear() 

son açıklamada olduğu gibi döngü. Uzun açıklama için özür dilerim.