2015-10-13 5 views
5

में ठीक से लिखने के लिए कैसे करें मैं foxpro के साथ बनाए गए पुराने .dbf डेटाबेस में नया डेटा डालने का प्रयास कर रहा हूं। डेटाबेस में बहुत सारे कॉलम हैं और मुझे हर एक को भरने की आवश्यकता नहीं है।सी # .dbf (foxpro)

कनेक्शन स्वयं ही काम करता है। लेकिन अब मैं अपवाद प्राप्त कर रहा हूं "फ़ील्ड एक्सवाई शून्य मूल्यों की अनुमति नहीं देता है" प्रत्येक व्यक्ति के लिए जो मैं अपने सम्मिलन कथन में नहीं जोड़ रहा हूं। लेकिन डेटाबेस को शून्य मानों को अनुमति देने के लिए कॉन्फ़िगर किया गया है।

  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(); 

तो क्या मैं गलत कर रहा हूँ:

मैं निम्नलिखित कोड का उपयोग कर रहा हूँ? क्या सी # से .dbf में लिखने के लिए एक और तरीका उपयोग करना बेहतर है?

+1

संदेश बहुत स्पष्ट प्रतीत होता है। आपके पास एक या अधिक कॉलम हैं जो नल मानों की अनुमति नहीं देते हैं और आप अपनी सम्मिलित क्वेरी में उनके लिए कोई मान निर्दिष्ट नहीं करते हैं। मैं सलाह देता हूं कि इस मुद्दे के लिए उस तालिका में प्रत्येक कॉलम को जांचने के लिए – Steve

उत्तर

5

आप लगभग इसे सही कर रहे हैं। ध्यान दें कि पैरामीटर नाम महत्वपूर्ण नहीं हैं और स्थितिगत रूप से स्थित होंगे (यानी: @ केडीएनआर पहले जोड़ा जाता है ताकि यह पहले से हो? प्लेसहोल्डर)। जो आप खो रहे हैं वह था, यदि आपके द्वारा पारित फ़ील्ड नल मान स्वीकार नहीं करते हैं तो आपको कनेक्शन को सूचित करना चाहिए कि इसके बजाय आप उन फ़ील्ड के लिए "रिक्त" मान चाहते हैं ('' स्ट्रिंग के लिए,// ​​तिथि के लिए, 0 के लिए संख्यात्मक और इसके विपरीत)। ड्राइवर को सूचित करने के लिए, आप उसी कनेक्शन पर 'सेट नल ऑफ़' निष्पादित करते हैं।

हालांकि यह जोड़ने, मैं अपने मौजूदा कोड थोड़ा संशोधित:

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(); 
} 

पुनश्च: Application.StartupPath एक अच्छा विचार यह "प्रोग्राम फ़ाइलें" जो केवल पढ़ने के लिए नीचे हो सकता है के रूप में नहीं हो सकता है।

पीएस 2: यदि आप "डीबीएफ" के बजाय वहां "वीएफपी" टैग जोड़ते हैं तो यह बेहतर होगा।

+0

आपकी सलाह के लिए धन्यवाद, यह अभी ठीक काम करता है – Sandmaann