09. januar 2004 - 10:21Der 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 :)
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 :)
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...
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...
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....
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....
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!!!! :)
Synes godt om
Ny brugerNybegynder
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.