Avatar billede telep Nybegynder
07. december 2005 - 16:31 Der er 21 kommentarer og
2 løsninger

SQL, OleDb og Update

hej,

Jeg skal læse noget data fra en tabel og når jeg har læst en record/linie færdig skal jeg update et felt i den pågælende record/tuble (kært barn har mange navne), før jeg læser den næste record.

Lidt kode

OleDbCommand dbCmd = new OleDbCommand("SELECT * FROM tblConfirmRecordings WHERE Completed = 0", dbConn);
            OleDbDataReader dbReader = dbCmd.ExecuteReader();
           
            while (dbReader.Read())
            {
                CopyTheWav(dbReader["SourceFilePath"].ToString(), dbReader["NewFilePath"].ToString(),
                            (int)dbReader["StartTime"], (int)dbReader["StopTime"]);
                OleDbCommand dbUpdate = new OleDbCommand("UPDATE tblConfirmRecordings SET Completed = 1 WHERE Completed = 0", dbConn);
                dbUpdate.ExecuteNonQuery();
            }
Avatar billede telep Nybegynder
07. december 2005 - 16:33 #1
Jeg vil altså først læse de fire felter: SourceFilePath, NewFilePath, StartTime og StopTime.

Dernæst vil jeg sætte feltet Completed = 1;

Burde ikke være så svært!

På forhånd tak :-)

Mvh
telep
Avatar billede innercitydk Nybegynder
07. december 2005 - 16:33 #2
Hvad er det præcist dit problem er :)

Vh Nicki
Avatar billede innercitydk Nybegynder
07. december 2005 - 16:34 #3
jeg så ikke din sidste post :P
Avatar billede telep Nybegynder
07. december 2005 - 16:36 #4
ok ;-)
Avatar billede dr_chaos Nybegynder
07. december 2005 - 16:40 #5
har du et ID på dine felter eller hvad er din primære nøgle ?
Avatar billede dr_chaos Nybegynder
07. december 2005 - 16:43 #6
det må være noget med:

OleDbCommand dbCmd = new OleDbCommand("SELECT * FROM tblConfirmRecordings WHERE Completed = 0", dbConn);
            OleDbDataReader dbReader = dbCmd.ExecuteReader();
         
            while (dbReader.Read())
            {
                CopyTheWav(dbReader["SourceFilePath"].ToString(), dbReader["NewFilePath"].ToString(),
                            (int)dbReader["StartTime"], (int)dbReader["StopTime"]);
                OleDbCommand dbUpdate = new OleDbCommand("UPDATE tblConfirmRecordings SET Completed = 1 WHERE Completed = 0 AND SourceFilePath="+dbReader["SourceFilePath"].ToString()+" AND NewFilePath="+dbReader["NewFilePath"].ToString()+" AND StartTime="+dbReader["StartTime"].ToString()+"  AND StopTime="+dbReader["StopTime"].ToString()+"", dbConn);
                dbUpdate.ExecuteNonQuery();
            }
Avatar billede innercitydk Nybegynder
07. december 2005 - 16:46 #7
string connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=STI TIL DB";   
            OleDbConnection myConnection = new OleDbConnection( connectionString );
            myConnection.Open();
            OleDbCommand dbCmd = new OleDbCommand("SELECT * FROM tblConfirmRecordings WHERE Completed = 0", dbConn);
            OleDbDataReader dbReader = dbCmd.ExecuteReader();
           
            while (dbReader.Read())
            {
                CopyTheWav(dbReader["SourceFilePath"].ToString(), dbReader["NewFilePath"].ToString(),
                    (int)dbReader["StartTime"], (int)dbReader["StopTime"]);
            }
            myReader.Close();
            myConnection.Close();
           
               
            myConnection.Open();
            OleDbCommand dbUpdate = new OleDbCommand("UPDATE tblConfirmRecordings SET Completed = 1 WHERE Completed = 0", dbConn);
            dbUpdate.ExecuteNonQuery();
            myConnection.Close();
            }
Avatar billede dr_chaos Nybegynder
07. december 2005 - 16:46 #8
Den update sætning jeg har lavet går ind og finder en række hvor de 4 felter værdier passer og sætter completed til 1.
Men det ville være noget kønnere hvis du havde et ID på feltet.
Avatar billede innercitydk Nybegynder
07. december 2005 - 16:47 #9
den jeg har arbejdede på samtidig :) udfører først det du vil have på dem der ikke er complete hvorefter den updater alle dem der ikke er complete.. simpelt

Vh
Avatar billede telep Nybegynder
07. december 2005 - 16:59 #10
An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll

Additional information: There is already an open DataReader associated with this Connection which must be closed first.
Avatar billede telep Nybegynder
07. december 2005 - 17:00 #11
Kommer på

dbUpdate.ExecuteNonQuery();
Avatar billede innercitydk Nybegynder
07. december 2005 - 17:00 #12
Prøv lige den jeg lavede
Avatar billede telep Nybegynder
07. december 2005 - 17:01 #13
innercitydk: den går ikke - det bliver nødt til at blive gjort så snart den første handling er blivet udført!
Avatar billede dr_chaos Nybegynder
07. december 2005 - 17:01 #14
denne her burde virke:
while (dbReader.Read())
            {
                /*CopyTheWav(dbReader["SourceFilePath"].ToString(), dbReader["NewFilePath"].ToString(),
                            (int)dbReader["StartTime"], (int)dbReader["StopTime"]);*/
                OleDbConnection dbConn1 = new OleDbConnection(connectionString);
                dbConn1.Open();
                OleDbCommand dbUpdate = new OleDbCommand("UPDATE tblConfirmRecordings SET Completed = 1 WHERE Completed = 0 AND SourceFilePath="+dbReader["SourceFilePath"].ToString()+" AND NewFilePath="+dbReader["NewFilePath"].ToString()+" AND StartTime="+dbReader["StartTime"].ToString()+"  AND StopTime="+dbReader["StopTime"].ToString()+"", dbConn1);
                dbUpdate.ExecuteNonQuery();
                dbConn1.Close();
            }
Avatar billede dr_chaos Nybegynder
07. december 2005 - 17:05 #15
virker den ?
Avatar billede dr_chaos Nybegynder
07. december 2005 - 17:15 #16
en anden mulighed kunne være at bruge et dataset
på denne måde:
string connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=STI TIL DB";
            OleDbConnection dbConn = new OleDbConnection(connectionString);
            OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM tblConfirmRecordings WHERE Completed = 0", dbConn);
            DataSet ds = new DataSet();
            oda.Fill(ds);
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                CopyTheWav(dr["SourceFilePath"].ToString(), dr["NewFilePath"].ToString(),
                          (int)dr["StartTime"], (int)dr["StopTime"]);
                dbConn.Open();
                OleDbCommand dbUpdate = new OleDbCommand("UPDATE tblConfirmRecordings SET Completed = 1 WHERE Completed = 0 AND SourceFilePath=" + dr["SourceFilePath"].ToString() + " AND NewFilePath=" + dr["NewFilePath"].ToString() + " AND StartTime=" + dr["StartTime"].ToString() + "  AND StopTime=" + dr["StopTime"].ToString() + "", dbConn);
                dbUpdate.ExecuteNonQuery();
                dbConn.Close();
            }
Avatar billede telep Nybegynder
07. december 2005 - 22:26 #17
dr_chaos:

den første du poster: ja den virker - den går ikke ned, MEN der er funktionen CopyTheWav også udkommenteret, det går ikke :-)

Den anden:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll

i

            DataSet ds = new DataSet();
           
            dataAdapter.Fill(ds);
Avatar billede dr_chaos Nybegynder
07. december 2005 - 22:36 #18
ikke for at være dum men hvad med så at udkommenterer copytowav ?
his den anden ikke virker så drop den :)
Avatar billede dr_chaos Nybegynder
13. december 2005 - 10:22 #19
fik du det til at virke ?
Avatar billede telep Nybegynder
20. december 2005 - 15:54 #20
kan sgu ikke lige hiske hvad der virkede i den sidste ende - smid et svar og så er der point
Avatar billede dr_chaos Nybegynder
21. december 2005 - 10:23 #21
svar :)
Avatar billede telep Nybegynder
28. december 2005 - 15:55 #22
.
Avatar billede telep Nybegynder
28. december 2005 - 15:55 #23
.
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