2015-10-13 17 views
5

Yeni verileri foxpro ile oluşturulan eski bir .dbf veritabanına eklemeye çalışıyorum. Veritabanında çok fazla sütun var ve her birini doldurmam gerekmiyor.C# düzgün bir şekilde bir .dbf (foxpro) içine nasıl yazılır

Bağlantının kendisi çalışıyor. Ama şimdi benim istisnayı alıyorum "Alan XY null değerlere izin vermez" benim ekleme deyiminde eklemiyorum her biri için. Ancak veritabanı boş değerlere izin verecek şekilde yapılandırılmıştır.

  OleDbConnection dbfcon = new OleDbConnection("Provider=VFPOLEDB.1;" + 
      "Data Source=" + Application.StartupPath + "\\Daten;"); 
     dbfcon.Open(); 

     String query = "INSERT INTO TB_KUVG (KDNR, Kuvg_id) " + 
      "VALUES(?,?)"; 
     OleDbCommand cmd = new OleDbCommand(query, dbfcon); 
     cmd.Parameters.AddWithValue("@KDNR", 1); 
     cmd.Parameters.AddWithValue("@Kuvg_id", 1); 
     cmd.ExecuteNonQuery(); 

     dbfcon.Close(); 

yüzden yanlış yapıyorum:

Aşağıdaki kodu kullanıyorum? C# 'dan bir .dbf dosyasına yazmak için başka bir yol kullanmak daha mı iyi?

+1

Bu mesaj oldukça açık görünüyor. NULL değerlerine izin vermeyen bir veya daha fazla sütununuz var ve bunlara ekleme sorgunuzda bir değer belirtmiyorsunuz. Bu konudaki tüm sütunları kontrol etmenizi öneririm – Steve

cevap

5

Neredeyse doğru yapıyorsunuz. Parametre adlarının önemli olmadığını ve konumsal olarak yerleştirileceğini unutmayın (yani: @KDNR ilk önce yer tutucuya karşılık gelecek şekilde eklenir). Kaybettiğiniz alanlar, geçmediğiniz alanlar NULL değerlerini kabul etmediyse, bu alanlar için "boş" değerler istediğiniz bağlantıyı bildirmeniz gerekir ('' dize için,// ​​tarih için, 0 için sayısal ve tersi). Sürücüyü bilgilendirmek için aynı bağlantıda 'SET NULL OFF' komutunu çalıştırırsınız.

eklemeden ederken

, ben mevcut kodu biraz revize:

string dataFolder = Path.Combine(Application.StartupPath, "Daten"); 
String query = @"INSERT INTO TB_KUVG 
      (KDNR, Kuvg_id) 
      VALUES 
      (?,?)"; 
using (OleDbConnection dbfcon = new OleDbConnection("Provider=VFPOLEDB;Data Source=" + dataFolder)) 
{ 
    OleDbCommand cmd = new OleDbCommand(query, dbfcon); 
    cmd.Parameters.AddWithValue("@KDNR", 1); 
    cmd.Parameters.AddWithValue("@Kuvg_id", 1); 

    dbfcon.Open(); 
    new OleDbCommand("set null off",dbfcon).ExecuteNonQuery(); 
    cmd.ExecuteNonQuery(); 
    dbfcon.Close(); 
} 

Not: Application.StartupPath sadece okunur "Program Files" altında olabilecek iyi bir fikir olmayabilir.

PS2: "DBF" yerine "VFP" etiketini eklediyseniz daha iyi olurdu.

+0

Tavsiyeniz için teşekkürler, şimdi iyi çalışıyor – Sandmaann

İlgili konular