27. marts 2006 - 13:31Der er
7 kommentarer og 1 løsning
sql og Dataset med beregninger
Er det ikke muligt, at foretage en sql-forespørgsel på database, lægge resultattet over i et lokalt dataset, hvorefter man har mulighed for tilgang til hver enkelt datafelt, som man laver nogle beregninger på, for derefter at gemme resulattet igen?
Hvis det er muligt, så vil jeg meget gerne se et simpelt - men komplet - eksempel på det.
SqlConnection connection = new SqlConnection("<connectionstring>"); SqlCommand command = new SqlCommand("select a_string, b_integer from tblLetters", connection); SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet data = new DataSet(); adapter.Fill(data);
foreach(DataRow row in data.Tables[0].Rows) { int length = row["a_string"].ToString().Length; if(length > 10) { row["a_integer"] = length; } }
SqlCommandBuilder commBuilder = new SqlCommandBuilder(adapter); adapter.Update(data);
mvh (commandbuilderen er en lidt dyr løsning hvad performance angår).
nu har jeg prøvet at køre det, men det giver en exception i: SqlConnection connection = new SqlConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\projekt\\a.mdb"); hvor den siger, at "provider" ikke er et understøttet nøgleord..?
Nu får jeg denne exception: {"Der blev oprettet en forbindelse til serveren, men derefter opstod en fejl under logon. (provider: Provider af delt hukommelse, error: 0 - Der er ingen proces i den anden ende af denne pipe.)"} ved linien adapter.Fill(data); Hvorfor kommer den? Er det fordi, der ikke er ordenlig adgang til databasen? Måske er det loginet, den er gal med. Min connectionstring ser således ud: "server=PC01;database=C:\\Inetpub\\wwwroot\\projekt\\a.mdb;user id=Admin;password=;"
nu er jeg gået over til OleDB, da jeg vist har bedre styr på det. Så nu ser koden således ud:
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\SqlDataset\\App_Data\\LøbeDatabase.mdb;User Id=admin;Password=;"; string query = "SELECT F_Name, F_Adress FROM T_Profile";//WHERE F_Id=" + id System.Diagnostics.Debug.Write("\n" + query.ToString() + "\n"); DataSet myDataSet = new DataSet(); OleDbConnection con = new OleDbConnection(); try { con = new OleDbConnection(ConnectionString); OleDbCommand command = new OleDbCommand(query, con); OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(command); con.Open(); System.Diagnostics.Debug.Write("\nquery er: " + query.ToString()); myDataAdapter.Fill(myDataSet); object[] obj=myDataSet.Tables["T_Profile"].Rows[0].ItemArray; int antal=myDataSet.Tables["T_Profile"].Rows.Count; for (int i = 0; i < antal-1; i++) { System.Diagnostics.Debug.WriteLine("Indholdet er: " + (string)obj[i]); } OleDbDataReader reader = command.ExecuteReader(); } catch (Exception e) { System.Diagnostics.Debug.Write("\nFejlen er: " + e.ToString()); } finally { con.Close(); System.Diagnostics.Debug.Write("\nDataset indeholder:\n"); }
Databasetabellen ser således ud:
F_Name F_Adress a d b e c f
Men når den kommer til: object[] obj=myDataSet.Tables["T_Profile"].Rows[0].ItemArray; så kommer fejlen: Fejlen er: System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt.
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.