2016-06-16 26 views
0

Ich versuche, einige Informationen an eine Access-Datenbank zu übergeben, aber ich bin mir nicht sicher, ob ich ExecuteNonQuery() richtig verwende. Hier ist der Code, den ich verwende:OleDbConnection - Nicht alle Informationen werden übergeben

public void WriteToDB(string connStr, string tblName) 
    { 
     string[] accounts = { "@ID", "@Date", "@Line Item", "@Ranking Item", "@Item Attribute", "@Current_Period_Ranking(b)" }; 

     OleDbConnection conn = new OleDbConnection(connStr); 
     conn.Open(); 
     OleDbCommand CmdSQL = new OleDbCommand(string.Format("Insert into [{0}] ([ID], [Date], [Line Item], [Ranking Item], [Ranking]) VALUES(?,?,?,?,?)",tblName),conn); 
     CmdSQL.Parameters.AddWithValue("@ID", 1); 
     CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016"); 
     CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName); 
     CmdSQL.Parameters.AddWithValue("@Ranking Item", "Ranking"); 
     CmdSQL.Parameters.AddWithValue("@Ranking", this.Rank.GetLineItem(3)); 
     CmdSQL.ExecuteNonQuery(); 
     CmdSQL.Parameters.AddWithValue("@ID", 2); 
     CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016"); 
     CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName); 
     CmdSQL.Parameters.AddWithValue("@Ranking Item", "Price"); 
     CmdSQL.Parameters.AddWithValue("@Ranking", this.Price); 
     CmdSQL.ExecuteNonQuery(); 
     CmdSQL.Parameters.AddWithValue("@ID", 3); 
     CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016"); 
     CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName); 
     CmdSQL.Parameters.AddWithValue("@Ranking Item", "Pounds"); 
     CmdSQL.Parameters.AddWithValue("@Ranking", this.Pounds); 
     CmdSQL.ExecuteNonQuery(); 
     CmdSQL.Parameters.AddWithValue("@ID", 4); 
     CmdSQL.Parameters.AddWithValue("@Date", "6/20/2016"); 
     CmdSQL.Parameters.AddWithValue("@Line Item", this.ItemName); 
     CmdSQL.Parameters.AddWithValue("@Ranking Item", "Opportunity"); 
     CmdSQL.Parameters.AddWithValue("@Ranking", this.Opportunity); 
     CmdSQL.ExecuteNonQuery(); 
    } 

Wenn ich dieses Bit Code ausführen, zeigt die Access DB nur die 1.

Antwort

3

Da Sie den gleichen Befehl verwenden, müssen Sie danach die Parameter klar aus:

CmdSQL.ExecuteNonQuery(); 
CmdSQL.Parameters.Clear(); 
CmdSQL.Parameters.AddWithValue("@ID", 4); 
.... 

Auf einer Seite zur Kenntnis, Termine Daten in einer Datenbank enthalten sein sollen, keine Strings. Ihre Datenbank sieht fraglich aus, wenn Sie mehrere Tabellen mit derselben Struktur haben. Warum nicht nur eine Tabelle und ein Feld, das den Typ der Zeile unterscheidet? Es würde Ihre Anfragen erleichtern. Es ist auch sehr üblich und vorteilhaft, diese wegwerfbaren Datenbankobjekte in Blöcke zu setzen.

+0

Auch auf die Daten: Es ist eine externe DLL, die ich schreibe, die mit VBA kommunizieren wird, also werde ich die Daten in Strings übergeben und sie dann als Daten laden. Habe die Arbeit an diesem Teil noch nicht gemacht. Dies stellte nur sicher, dass die Ladung funktionierte. Danke für Ihre Hilfe! – jDave1984