2009-02-03 18 views
5

से कनेक्ट करने के मैं एक समस्या मेरे एमएस एक्सेस DB 2007 कोड से कनेक्ट कर रहा है। इसका मतलब यह होना चाहिए कि मेरा डेटा डाला गया है। लेकिन जब मैं accdb फ़ाइल खोलता हूं तो कोई डेटा डाला नहीं जाता है। मैं क्या गलत कर रहा हूं?सी # कैसे एमएस एक्सेस 2007

Thnx

संपादित करें: ExecuteNonQuery() के रिटर्न मान है 1 (मैं अपनी पोस्ट को संपादित करें, क्योंकि मैं कोई टिप्पणी नहीं जोड़ सकते, जब मैं टिप्पणी जोड़ने के लिए क्लिक करें, बॉक्स दिखाई नहीं देता ..)

संपादित करें 2: मैंने शीर्षक और स्थान गुणों के साथ एक कक्षा बनाई है। कोड: निजी शून्य btnSave_Click (ऑब्जेक्ट प्रेषक, EventArgs ई) { OleDbConnection Conn = new OleDbConnection();

try 
{ 
    string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ Directory.GetCurrentDirectory() +"\\dvd_manager.accdb;Persist Security Info=False;"; 
    Conn.ConnectionString = conn; 

    // Create object 
    Medium M = new Medium(); 
    int i = cbbLocatie.SelectedIndex + 65; 
    char c = (char)i; 

    M.Location = c; 
    M.Title = txtTitle.Text; 

    Conn.Open(); 

    string sql = "INSERT INTO DVD (titel, locatie)VALUES(@titel, @locatie)"; 
    OleDbCommand Com = new OleDbCommand(); 
    Com.CommandText = sql; 
    Com.Connection = Conn; 

    OleDbParameter Param1 = new OleDbParameter("@titel", M.Title); 
    Com.Parameters.Add(Param1); 

    OleDbParameter Param2 = new OleDbParameter("@locatie", M.Location); 
    Com.Parameters.Add(Param2); 

    int ret = Com.ExecuteNonQuery(); 
    Conn.Close(); 

    MessageBox.Show("Data is opgeslagen " + ret); 
} 
catch (OleDbException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Fout opgetreden: " + ex.Message); 
} 
finally 
{ 
    Conn.Close(); 
} 

}

के बाद से मैं अभी भी ऐड टिप्पणी बटन पर क्लिक करें नहीं कर सकते, यहाँ बेनाम एसक्यूएल मानकों के साथ अपने नए कोड है:

// some code 
Conn.Open(); 

string sql = "INSERT INTO DVD (titel, locatie)VALUES(?, ?)"; 
OleDbCommand Com = new OleDbCommand(); 
Com.CommandText = sql; 
Com.Connection = Conn; 

OleDbParameter Param1 = new OleDbParameter("@p1", OleDbType.VarChar, 1); 
Param1.Value = M.Title; 
Com.Parameters.Add(Param1); 

OleDbParameter Param2 = new OleDbParameter("@p2", OleDbType.VarChar, 255); 
Param2.Value = M.Location; 
Com.Parameters.Add(Param2); 

int ret = Com.ExecuteNonQuery(); 
Conn.Close(); 
// morde code 
+0

क्या नामहीन-पैरामीटर परिवर्तन मदद करता था? –

+0

नहीं, यह नहीं .. – Martijn

उत्तर

1

ExecuteNonQuery किसी पूर्णांक प्रभावित पंक्तियों की संख्या का संकेत वापस आ जाएगी । पहली चीज जो मैं करूँगा वह वापसी की जांच करेगी। ExecuteNonQuery किसी भी पंक्ति को निष्पादित और प्रभावित नहीं कर सकता है, जो पकड़ को ट्रिगर नहीं करेगा।

+0

वापसी मूल्य 1 – Martijn

+0

धन्यवाद। इससे मुझे बहुत परेशानी बचाई! मेरा अपडेट कमांड कुछ भी प्रभावित नहीं कर रहा है और वापसी मान 0. – Achilles

1

मेरे ज्ञान के लिए आप ओलेडीबी पैरामीटर के साथ नामित पैरामीटर का उपयोग नहीं कर सकते हैं।

string sql = "INSERT INTO DVD (titel, locatie)VALUES(?, ?)"; 

और फिर आप सही क्रम में OleDbParameters जोड़ने के लिए:

आपका डालने की तरह दिखना चाहिए। नामों का उपयोग नहीं किया जाता है।

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx

संपादित करें:

Untested नीचे लेकिन यहाँ कोड मैं इसे कैसे करना होगा का एक उदाहरण है।

using(OleDbConnection connection = new OleDbConnection(CONNECTION_STRING)) 
{ 
    using(OleDbCommand command = connection.CreateCommand()) 
    { 
    command.CommandType = CommandType.Text; 
    command.CommandText = "INSERT INTO DVD(title,locatie)VALUES(?,?)"; 
    command.Parameters.Add("@p1", OleDbType.VarChar, 1).Value = M.Title; 
    command.Parameters.Add("@p2", OleDbType.VarChar, 255).Value = M.Location; 

    connection.Open(); 
    int ret = command.ExecuteNonQuery(); 
    } 
} 
+0

संपादित करें: कनेक्शन। निष्पादन NonQuery(); ==> आदेश .. निष्पादन NonQuery(); – Davorin

0

जब मैं कोड करता हूं, तो मैं अपने काम को सरल बनाना चाहता हूं और कभी भी फिर से नहीं करना चाहता हूं। मैं पैरामीटर के लिए एक विधि बनाना सरल बना सकता हूं जैसे:

public void setParameter(String paramAT, String paramTxt) 
{ 
    OleDbCommand myCommand; 
    DbParameter parameter = myCommand.CreateParameter(); 
    parameter.ParameterName = paramAT; 
    parameter.Value = paramTxt; 
    myCommand.Parameters.Add(parameter); 
} 

public int CreateDVD() 
{ 
    try 
    { 
     string strSqldvd = "INSERT INTO DVD(title,locatie)VALUES(@title,@locate?)"; 

     myCommand = (OleDbCommand)dbconn.MyProvider.CreateCommand(); 
     dbconn.MyConnection.Open(); 
     myCommand.Connection = dbconn.MyConnection; 
     myCommand.CommandText = strSqldvd; 
     setParameter("@title",M.Title); 
     setParameter("@locate", M.Location); 
    } 
    catch (Exception) 
    { 
     throw new ArgumentException(); 
    } 

    int count = myCommand.ExecuteNonQuery(); 
    dbconn.MyConnection.Close(); 
    return count; 
} 

यह कितना आसान है। मैं अपने पैरामीटर विधि को अपने अपडेट और डालने आदि में डालने और रखता हूं .... उम्मीद है कि इससे मदद मिलेगी।