Avatar billede brian-johansen Nybegynder
19. maj 2005 - 15:23 Der er 11 kommentarer og
1 løsning

insert problem

Hej,

Jeg få et problem med hensyn til at indsætte i en database.
jeg har skrevet følgende

string strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Websites\\website6\\data\\kalender.mdb";
        string strSQL = "SELECT * FROM events";
        OleDbConnection myConn = new OleDbConnection(strDSN);
        OleDbDataAdapter myCmd = new OleDbDataAdapter(strSQL, myConn);
        OleDbCommand1.CommandText = "select * From events";
        myConn.Open();
        myCmd.Fill(data, "Events");
        DataRow dr = data.Tables[0].NewRow();
        dr["afholder"] = navn.Text;
        dr["dato"] = dato.Text;
        dr["event"] = emne.Text;
        dr["start"] = start.Text;
        dr["slut"] = slut.Text;
        dr["placering"] = placering.Text;
        dr["privat"] = Boolean.TrueString;
        data.Tables[0].Rows.Add(dr);
        oleDbInsertCommand1.ExecuteNonQuery();
        myCmd.Update(data, "events");
        myConn.Close();

Men jeg får en fejl der hedder " Object reference not set to an instance of an object. "
Den mener fejlen ligger i linien med "oleDbInsertCommand1.ExecuteNonQuery();"

Nogen der har nogle ideer til en løsning ?

mvh Brian
Avatar billede nielle Nybegynder
19. maj 2005 - 15:51 #1
Din kommando hedder jo også muCmd alle andre steder i koden.
Avatar billede nielle Nybegynder
19. maj 2005 - 15:52 #2
myCmd.ExecuteNonQuery();
Avatar billede brian-johansen Nybegynder
19. maj 2005 - 15:56 #3
prøver lige
Avatar billede brian-johansen Nybegynder
19. maj 2005 - 15:58 #4
jamen det er jo min data adapter der hedder myCmd, skal jeg ikke bruge min insertcommand ?
Avatar billede nielle Nybegynder
19. maj 2005 - 16:09 #5
Jamen det er det da også... Jeg lod mig lige narre af at du havde kaldt den myCmd som i "command".

Jeg kan se at der er en del fejl i koden, og da jeg ikke lige har en Access ved hånden her må jeg lige hjem før at jeg kan give dig løsningen.

Men kort sagt så får du din exception fordi at du aldrig har assignet noget fornuftigt til variablen oleDbInsertCommand1. Derfor brokker den sig da også når du forsøger at bruge den.
Avatar billede brian-johansen Nybegynder
19. maj 2005 - 16:11 #6
ok
Avatar billede nielle Nybegynder
19. maj 2005 - 18:32 #7
Sådan her kan du gøre det:

string myConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Websites\\website6\\data\\kalender.mdb";
OleDbConnection myConn = new OleDbConnection(myConnStr);
OleDbDataAdapter myAdapter = new OleDbDataAdapter();

string mySelectSQL = "SELECT * FROM events";
OleDbCommand mySelectCmd = new OleDbCommand(mySelectSQL, myConn);
myAdapter.SelectCommand = mySelectCmd;

// Dette er hemmeligheden - ved at lave OleDbCommandBuilder får man
// automatisk oprettet en InsertCommand- og en UpdateCommand komamndo
// for myAdapter. Det er disse som bliver aktiveret når man senere
// kalder Update()
OleDbCommandBuilder myCommandBuilder = new OleDbCommandBuilder(myAdapter);

myConn.Open();

DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet, "Events");

DataRow myDataRow = myDataSet.Tables[0].NewRow();
myDataRow["afholder"] = navn.Text;
myDataRow["dato"] = dato.Text;
myDataRow["event"] = emne.Text;
myDataRow["start"] = start.Text;
myDataRow["slut"] = slut.Text;
myDataRow["placering"] = placering.Text;
myDataRow["privat"] = Boolean.TrueString;
myDataSet.Tables[0].Rows.Add(myDataRow);

myAdapter.Update(myDataSet, "Events");

myConn.Close();
Avatar billede nielle Nybegynder
19. maj 2005 - 18:50 #8
Men hvis du bare ønsker at indsætte din række, så er der ikke nogen grund til at gå over et DataSet og en DataAdapter:

string myConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Websites\\website6\\data\\kalender.mdb";
OleDbConnection myConn = new OleDbConnection(myConnStr);

string myInsertSQL = "INSERT INTO events (afholder, dato, event, start, slut, placering, privat) VALUES (@afholder, @dato, @event, @start, @slut, @placering, @privat)";
OleDbCommand myInsertCmd = new OleDbCommand(myInsertSQL, myConn);
myInsertCmd.Parameters.Add("@afholder", OleDbType.VarChar, 50).Value = navn.Text;;
myInsertCmd.Parameters.Add("@dato", OleDbType.VarChar, 50).Value = dato.Text;
myInsertCmd.Parameters.Add("@event", OleDbType.VarChar, 50).Value = emne.Text;
myInsertCmd.Parameters.Add("@start", OleDbType.VarChar, 50).Value = start.Text;
myInsertCmd.Parameters.Add("@slut", OleDbType.VarChar, 50).Value = slut.Text;
myInsertCmd.Parameters.Add("@placering", OleDbType.VarChar, 50).Value = placering.Text;
myInsertCmd.Parameters.Add("@privat", OleDbType.VarChar, 50).Value = Boolean.TrueString;

myConn.Open();
myInsertCmd.ExecuteNonQuery();
myConn.Close();
Avatar billede brian-johansen Nybegynder
20. maj 2005 - 09:32 #9
ok jeg prøver det lige i efter middag, tak for hjælpen !
Avatar billede nielle Nybegynder
20. maj 2005 - 10:12 #10
I det seneste kode-eksempel skal du selvfølgelig ændre alle forekomster af "OleDbType.VarChar" til hvordan du rent faktisk har defineret din tabel. "OleDbType.VarChar, 50" betyder f.eks. "Tekst, længde 50" i en Access database.
Avatar billede brian-johansen Nybegynder
22. maj 2005 - 23:54 #11
Det virkede mange tak for hjælpen smider du lige et svar ?
Avatar billede nielle Nybegynder
23. maj 2005 - 16:52 #12
Et vsar :^)
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