07. december 2005 - 16:31Der 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(); }
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
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(); }
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.
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
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(); }
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(); }
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.