Avatar billede keepy Seniormester
04. april 2011 - 08:39 Der 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();
           
        }
    }
Avatar billede ulrikm Nybegynder
04. april 2011 - 12:55 #1
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.
Avatar billede keepy Seniormester
04. april 2011 - 15:00 #2
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 + "')";
Avatar billede ulrikm Nybegynder
04. april 2011 - 16:52 #3
nåh, ms access - det havde jeg lige overset. Du skal navngive de kolonner du indsætter i (uden auto inc kolonnen):

String Log = "INSERT INTO LOGTABEL (b,c,d,e,f,g,h,i,j) VALUES (" + "'" + b + "'" + "," + "'" + c + "'" + "," + "'" + d + "'" + "," + "'" + e + "'" + "," + "'" + f + "'" + "," + "'" + g + "'" + "," + "'" + h + "'" + "," + "'" + i + "'" + "," + "'" + j + "')";
Avatar billede keepy Seniormester
11. april 2011 - 20:02 #4
1000 TAK giver du svar
Avatar billede ulrikm Nybegynder
11. april 2011 - 20:09 #5
velbekomme
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester