Speichern
-
Hallöchen,
ich hoffe mir kann hier jemand helfen. ich habe eine Tabelle, die Vor, und Nachname, sowie die Telefonnummer enthält, also 3 Spalten. Die Daten werden aus einer Datenbank gelesen, mittels Stored Procedures. Ich habe 3 Stored Procedures zur Verfügung: Read, Insert und Update. Jetzt habe ich das so gestaltet, dass der User die Telefonnr editieren kann, bzw. einfach in die Spalte reinschreiben kann. Unter die Tabelle soll nun ein Button "Speichern", sodass die eingetragenen Telefonnummern gespeichert werden können. Die Daten sollen dann ja auch in die Datenbank geschrieben werden. Weiß leider gar nicht, wie ich anfangen soll. Könnt ihr mir helfen???
-
Hi,
ich weiß jetzt nicht genau wie du die Daten eingelesen hast bzw. anzeigst. Deshalb jetz mal ein paar wilde Spekulationen/ Ideen dazu:
Wenn du einen DataAdapter verwendest werden Änderungen am DataSet meines wissens nach automatisch in die Datenbank geschrieben.
Wenn du es mit dem Speicherbutton machen willst, müsstest du irgendwo vermerken welche Felder geändert wurden und diese dann mittels deiner Stored Procedure Update zurück schreiben. Alternativ kannst du auch eine Routine mache die den entsprechenden Datensatz liest mit dem in der Liste vergleicht und bei Differenz zurück schreibt.
Gruß SkySurfer
-
Hier habe ich den Code. Die Daten zeige ich so an. Ich wollte das schon ganz gerne mit dem "Speichern" Button machen. Wie meinst du das Felder vermerken??
using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Tools; using DBTools; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int anz = getLines(); TextBox[] txtBox; txtBox = new TextBox[anz]; DBLayer db = new DBLayer(); SqlConnection con = db.get_sqlconnection(); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandTimeout = 750; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "usp_read"; SqlDataReader dr = null; try { dr = cmd.ExecuteReader(); } catch (Exception ex) { throw new Exception("can't reading Data", ex); } string txt = ""; string vn, nn, tel; string rowCol = ""; int z = 0; string tablehead = "<table bordercolor='black' cellspacing='0' cellpadding='3' border='1' style='FONT-SIZE: 10pt; FONT-FAMILY: Verdana; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fdfdfd'>"; Panel1.Controls.Add(new LiteralControl(tablehead)); while (dr.Read()) { try { vn = (string)dr["Firstname"]; } catch { vn = ""; } try { nn = (string)dr["Lastname"]; } catch { nn = ""; } try { tel = (string)dr["Tel"]; } catch { tel = ""; } Panel1.Controls.Add(new LiteralControl("<tr style='COLOR: black; BACKGROUND-COLOR: #ffffff'>")); Panel1.Controls.Add(new LiteralControl("<td>" + vn + "</td>")); Panel1.Controls.Add(new LiteralControl("<td>" + nn + "</td>")); Panel1.Controls.Add(new LiteralControl("<td>")); txtBox[z] = new TextBox(); txtBox[z].ID = "tbox" + z; txtBox[z].TabIndex = (short)z; txtBox[z].Width = 90; txtBox[z].Height = 20; txtBox[z].Text = tel; Panel1.Controls.Add(txtBox[z]); Panel1.Controls.Add(new LiteralControl("</td></tr>")); z++; } Panel1.Controls.Add(new LiteralControl("</table><br />")); dr.Close(); db.close(); } int getLines() { DBLayer db = new DBLayer(); SqlConnection con = db.get_sqlconnection(); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandTimeout = 750; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "usp_read"; SqlDataReader dr = null; try { dr = cmd.ExecuteReader(); } catch (Exception ex) { throw new Exception("can't reading Data", ex); } int z = 0; while (dr.Read()) { z++; } return z; dr.Close(); db.close(); }
-
verwende bitte die C# Tags 3. Reihe 2. von rechts
du legst nen Button an und rufst bei der OnBtnClick eine Methode setLines auf! Die Methode kannst dann quasi gleich der getLines machen nur halt writer statt reader etc.
-
Ja, in meiner getLines Methode habe ich mit nem Reader gearbeitet. Allerdings bringt mich dein Tipp nich so ganz weiter, denn dort habe ich ja einen SqlDataReader benutzt. Wie mache ich das jetzt mit setLines()???
-
Deine Procedure hat ja Platzhalter für die Werte. Diese setzt du mittels cmd.Parameters.Add(Platzhalter, Wert);
und dann ein
cmd.ExecuteNonQuery();
sendet das ganze an die Datenbank.