Avatar billede cogitans Nybegynder
27. marts 2006 - 13:31 Der 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.
Avatar billede snepnet Nybegynder
27. marts 2006 - 18:47 #1
du kan få et lille eksempel her...

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).
Avatar billede cogitans Nybegynder
27. marts 2006 - 19:32 #2
Okay. Men har du så en løsning uden commandbuilderen?
Avatar billede snepnet Nybegynder
27. marts 2006 - 22:50 #3
du sætter bare respektive kommandoer på adapteren:
adapter.InsertCommand/DeleteCommand/UpdateCommand
mvh
Avatar billede cogitans Nybegynder
28. marts 2006 - 08:47 #4
Og så kan
SqlCommandBuilder commBuilder = new SqlCommandBuilder(adapter);
helt undlades?
Avatar billede cogitans Nybegynder
28. marts 2006 - 11:29 #5
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..?
Avatar billede cogitans Nybegynder
28. marts 2006 - 11:48 #6
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=;"
Avatar billede cogitans Nybegynder
28. marts 2006 - 12:53 #7
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.

Hvad kan fejlen være?
Avatar billede cogitans Nybegynder
28. marts 2006 - 13:40 #8
Så har jeg løst det med OleDB...
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