Avatar billede the_party_dog Nybegynder
09. januar 2004 - 10:21 Der er 17 kommentarer og
1 løsning

C#, SQL, DataAdapter

Jeg er igang med at udvilke en Lagerstyrings webapplikation til en afdelig i min virksomhed, og vil give brugerne muligheden for at ændre nogle værdier på en gemt Enhed i databasen.

Jeg får fint directed brugeren om til en side, hvor han de felter han skal have, for at ændre tingene som han vil have det. Men når jeg skal gemme det han har ændret, falder det hele fra hinanden.

string DescriptionText = DescriptionBox.Text;
            string CommentText = CommentBox.Text;
            string OwnerText = OwnerBox.Text;
            string PlaceText = PlaceDrop.SelectedItem.Text.ToString();
Her tager jeg de felter som er til rådighed for ændringer, og gemmer dem i nogle string variabler.

string LagerstyringStr = ConfigurationSettings.AppSettings["Lagerstyring"];
            SqlConnection LagerstyringCon = new SqlConnection(LagerstyringStr);

            string Editsql = "SELECT ID, Description, Owner, Place FROM Data WHERE ID = '" + (string)Session["Edit_ID"] +"'";
            SqlDataAdapter EditAdap = new SqlDataAdapter(Editsql,LagerstyringCon);
Her sætter jeg min connection til min database, og laver en DataAdapter, som kun udtager én bestemt række fra databasen, baseret på ID nummeret, som jeg har med fra den forrige side.

Det er nu jeg får problemer... Jeg ved ikke hvordan jeg via min DataAdapter skal få gemt ændringerne i min database. Min idé var noget i denne stil:

LagerstyringCon.Open();
                        EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Description = '"+ DescriptionText +"'";

EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Owner = '"+ OwnerText +"'";

EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Place = '"+ PlaceText +"'";

EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Comment = '"+ CommentText +"'";

LagerstyringCon.Close();
Det var min plan, har prøvet alt muligt, kan slet ikke få det til at virke. Får en fejlbesked fra Visual 2002 som lyder:
"Object reference not set to an instance of an object."


Så i visemænd, ude i det store land, kom med jeres ider, og hjælp en mand i nød :)
Avatar billede arne_v Ekspert
09. januar 2004 - 10:35 #1
Hvilken linie får du fejlen i ?
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 10:38 #2
Første linje med min EditAdapter...

EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Description = '"+ DescriptionText +"'";

Den er den linje der skriver at fejlen kommer i, linje 252...
Avatar billede arne_v Ekspert
09. januar 2004 - 10:45 #3
Umiddelbart lyder det som om dre mangler en:

EditAdap.UpdateCommand = new EtEllerAndet();

inden den linie (EditAdap er jo new'et)
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 10:48 #4
Men jeg troede når jeg skrev i CommandText, at den håndterede commando'en, og bare sendte den afsted til min database. Men jeg skal ikke kunne sige det, er total n00b indenfor denne programmerings verden... Vil lige se nærmere på det, men du må gerne se om du kan finde noget som kan hjælpe :)
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 10:55 #5
Prøv at lave
string DescriptionText = "Din tekst her";
i stedet for. Bare for test.
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 10:58 #6
Har jeg lige afprøvet, har også prøvet at skrive:

EditAdap.UpdateCommand.CommandText = "UPDATE Data SET Description = 'Min tekst her'";

Men samme fejl igen, ved begge ting
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:04 #7
det MÅ nødvendigvis være EditAdap der ikke er initieret rigtigt. Jeg kan bare ikke regne ud hvorfor.
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 11:10 #8
Det kan du kun have ret i, men hvis vi brækker det hele ned i små stykker.

string LagerstyringStr = ConfigurationSettings.AppSettings["Lagerstyring"];
            SqlConnection LagerstyringCon = new SqlConnection(LagerstyringStr);
Her laver jeg min Connection opsætning.

string Editsql = "SELECT ID, Description, Owner, Place FROM Data WHERE ID = '" + (string)Session["Edit_ID"] +"'";
            SqlDataAdapter EditAdap = new SqlDataAdapter(Editsql,LagerstyringCon);
Her får jeg min adapter til at hente én Row ud fra min database. Hvis jeg prøver at få den række over i et Datagrid, så kan den godt vise det som det skal.

Men når jeg så prøver på at få EditAdap til at skrive en command til databasen, og gemme mine ændringer, så fejler den.... Jeg indrømmer blankt at jeg ikke er en haj...
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:17 #9
Prøv:
EditAdap.UpdateCommand = new SqlCommand("SELECT * FROM Customers " +
                      "WHERE Country = @Country AND City = @City", conn);
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:18 #10
... altså med din egen SQL selvfølgelig.
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 11:21 #11
Den sætning har jeg set før, men så er det noget med at "Parameters" skal bruges, og defineres bagefter, og det forstår jeg slet ikke noget logisk af, men hvis du kan give et lidt bedre eksempel end dem jeg har fundet på nettet omkring "Parameters" så ville det måske hjælpe mig til forståelse...
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:24 #12
Der er et eksempel her, fundet på MSDN. Hvad er du helt præcis i tvivl om?

  // Create the UpdateCommand.

  cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
                      "WHERE CustomerID = @oldCustomerID", conn);

  cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
  cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");

  parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
  parm.SourceVersion = DataRowVersion.Original;

  da.UpdateCommand = cmd;
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 11:24 #13
Mener ihvertfald at @'et foran Country betyder parameter, som man så definere senere, hvor man måske kan sætte parameteren lig med min DescriptionBox.Text....
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:25 #14
hmm, ved nærmere gennemlæsning kan jeg se at jeg heller ikke fatter det :) onsgyl *rødmer*
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 11:26 #15
oki... Tak... Følte mig lidt dum.. :)
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 11:28 #16
Men nu vil jeg daffe til middag, og se om nogle af de andre kloge hoveder her på virksomheden kan løse det... Ellers må jeg ud og surfe noget mere, og spørge i nogle flere forums.. Jeg siger indtil videre mange tak for jeres gode forslag og forsøg....
Avatar billede nielsbrinch Nybegynder
09. januar 2004 - 11:30 #17
Her er en god konstruktør til SQLParameter:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatasqlclientsqlparameterclassctortopic6.asp

Jeg er ked af jeg ikke kunne hjælpe bedre :(
Avatar billede the_party_dog Nybegynder
09. januar 2004 - 12:22 #18
LagerstyringCon.Open();

                        SqlCommand command = new SqlCommand("",LagerstyringCon);

                        command.CommandText = "UPDATE Data SET Description = '"+ DescriptionText +"' WHERE ID = '"+ (string)Session["Edit_ID"] +"'";
                        command.ExecuteNonQuery();
                       
                        command.CommandText = "UPDATE Data SET Owner = '"+ OwnerText +"' WHERE ID = '"+ (string)Session["Edit_ID"] +"'";
                        command.ExecuteNonQuery();

                        command.CommandText = "UPDATE Data SET Place = '"+ PlaceText +"' WHERE ID = '"+ (string)Session["Edit_ID"] +"'";
                        command.ExecuteNonQuery();

                        command.CommandText = "UPDATE Data SET Comment = '"+ CommentText +"' WHERE ID = '"+ (string)Session["Edit_ID"] +"'";
                        command.ExecuteNonQuery();

                        LagerstyringCon.Close();

Dette blev løsningen... Sprang udenom min DataAdapter, skulle alligevel ikke rigtig bruge den når jeg skulle lave min update til databasen. Så problemet er løst, og dagen er reddet. Niels du får rigtig mange tak for din tid, og dine ider!!!! :)
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