04. april 2011 - 08:39Der er
4 kommentarer og 1 løsning
C# SQL kommandoer
HEj
Hvordan virker det entlig med at sende SQL kommandoer ?? Gøres det altid via en String??
JEg skal have lavet autoincrement af min Key colonne, men hvordan gør jeg det?? jeg har lavet nedenstående kode.
class DatabaseWrite {
OleDbConnection MyConnection = null; private void Autoinc() { CREATE TABLE LOGTABEL ( Key PRIMARY KEY AUTOINCREMENT, b varchar(255) NOT NULL, c varchar(255), d varchar(255), e varchar(255), f varchar(255), g varchar(255), h varchar(255), i varchar(255), j carchar(255) ) } public void DatabaseConnection(int a,String b, String c, String d, String e, String f, String g, String h, String i, String j) {
String Log = "INSERT INTO LOGTABEL VALUES (" + a + "," + "'" + b + "'" + "," + "'" + c + "'" + "," + "'" + d + "'" + "," + "'" + e + "'" + "," + "'" + f + "'" + "," + "'" + g + "'" + "," + "'" + h + "'" + "," + "'" + i + "'" + "," + "'" + j + "')"; MessageBox.Show(Log); MyConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; User Id=; Password=; Data Source=C:\LogDatabase.mdb"); MyConnection.Open(); OleDbCommand odbcom = new OleDbCommand(Log, MyConnection);
int i=odbcom.ExecuteNonQuery(); MessageBox.Show(i.ToString()); MyConnection.Close();
Jeg tror du kan lave auto increment med keyword "identity":
CREATE TABLE LOGTABEL ( Key PRIMARY KEY identity, b varchar(255) NOT NULL,
For at undgå problemer med " og ' og den slags, bør du bruge parametre ved insert:
.. OleDbCommand odbcom = new OleDbCommand(Log, MyConnection); odbcom.CommandText = "INSERT INTO LOGTABEL VALUES (?,?); // nb! "a" indsættes automatisk af tabellen pga auto increment odbcom.Parameters.Add(b,OleDbType.Varchar); odbcom.Parameters.Add(c,OleDbType.Varchar); int i=odbcom.ExecuteNonQuery(); ..
- Normalt anbefaler man dog at lave stored procedures med insert/select/etc i stedet for at kalde det direkte (dynamisk sql). Så kan der optimeres på databasen, logges parametre, etc, uafhængigt af dit program. Det er også normalt dyrere rent performancemæssigt at bruge dynamisk sql, da kode i en stored procedure kan optimeres "under hjelmen" af databasen.
Dog er det min erfaring, at det er dyrere at kalde en stored procedure, hvis den udelukkende indeholder en simpel insert. En dynamisk sql løsning kan altså være at foretrække, hvis der indsættes mange gange hurtigt efter hinanden. Start dog med en stored procedure løsning og optimer, hvis det ikke dur.
Måske var det også en god idé at lave CREATE TABLE i et script for sig. Det er typisk noget som køres een gang i forbindelse med installation - det behøver C# programmet ikke at kende noget til - det skal bare kende stored procedure interfacet.
Jeg har sat mit access database op til autoincrement, men når jeg vil skrive til databasen fra mit C# programmer siger den at, der ikke er data til alle kolonner.
Kan man ikke skrive noget i starten af nedenstående SQL kommendo der giver autoincrement af min key.??
String Log = "INSERT INTO LOGTABEL VALUES (" + AUTOINCREMENT????? + "," + "'" + b + "'" + "," + "'" + c + "'" + "," + "'" + d + "'" + "," + "'" + e + "'" + "," + "'" + f + "'" + "," + "'" + g + "'" + "," + "'" + h + "'" + "," + "'" + i + "'" + "," + "'" + j + "')";
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.