Avatar billede mema Nybegynder
18. juli 2006 - 22:27 Der er 20 kommentarer og
1 løsning

Updating checkbox i en update-command

Hej,
Jeg har en detail-side, hvor der vha. en DataReader vises 3 tekstfelter fra en Access database. Jeg har også et yderliger felt, som er en checkbox (den hedder Anerkendt i databasen og fAnerkendt i formen).

Jeg ville gerne kunne ændre på checked/unchecked status af checkboxen og vha. en metode opdatere databasen.
Mit spørgsmål er:
1- Er det overhoved muligt at gøre det på denne måde?
2- Hvis min kode ikke er helt forkert, hvad er det, det skal til for at opdatering af checkbox virker?

Min aspx.cs fil:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.OleDb;

namespace EIS
{
/// <summary>
/// Summary description for Detaljer.
/// </summary>
public class Detaljer : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblID;
protected System.Web.UI.WebControls.Label lblNavn;
protected System.Web.UI.WebControls.Label lblEmail;
protected System.Web.UI.WebControls.CheckBox fAnerkendt;
protected System.Web.UI.WebControls.Button fbOpdater;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InsertFilValues();
}
}

private void InsertFilValues()
{
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb")))
using (OleDbCommand command = new OleDbCommand("SELECT ID,Navn,Email,Anerkendt FROM eis WHERE ID = @ID", connection))
{
command.Parameters.Add("@ID", typeof(int));
command.Parameters["@ID"].Value = int.Parse(Request.QueryString["ID"]);
command.Connection.Open();
using (OleDbDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
lblID.Text = reader.GetInt32(reader.GetOrdinal("ID")).ToString();
lblNavn.Text = reader["Navn"].ToString();
lblEmail.Text = reader["Email"].ToString();
if (reader["Anerkendt"].ToString().Equals("False"))
fAnerkendt.Checked = false;
else
fAnerkendt.Checked = true;                           
connection.Close();
}
}
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
       
/// <summary>
private void InitializeComponent()
{   
this.fbOpdater.Click += new System.EventHandler(this.fbOpdater_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

private void fbOpdater_Click(object sender, System.EventArgs e)
{
int id = int.Parse(Convert.ToString(this.lblID.Text));
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Anerkendt='" + this.fAnerkendt.FindControl("fAnerkendt") + "' WHERE id=@id", conn);
OleDbParameter parameter = new OleDbParameter("@id", OleDbType.Integer);
parameter.Value = id; // altså integerid'et fra før
command.Parameters.Add(parameter);
conn.Open();
command.ExecuteNonQuery();
conn.Close();
}
}
}
Avatar billede snepnet Nybegynder
19. juli 2006 - 20:22 #1
Ja det kan du sagtens gøre

int id = int.Parse(Convert.ToString(this.lblID.Text));
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Anerkendt=@anerkendt WHERE id=@id", conn);
OleDbParameter parameter = new OleDbParameter("@id", OleDbType.Integer);
parameter.Value = id; // altså integerid'et fra før
command.Parameters.Add(parameter);

OleDbParameter par = new OleDbParameter("@anerkendt", OleDbType.Boolean);
par.Value = fAnerkendt.Checked;
command.Parameters.Add(par);

conn.Open();
command.ExecuteNonQuery();
conn.Close();

Mvh
Avatar billede mema Nybegynder
20. juli 2006 - 01:13 #2
Hej snepnet,
Tak for svaret. Desværre opdateres status af checkboxen i databasen ikke, selvom jeg ikke får nogen fejlmeddelelse.
Måske er det fordi jeg har yderligere tekst-felter som jeg (for nemhedens skyld) ikke har nævnt.

Den egentlige kode for aspx.cs-fil:

private void fbOpdater_Click(object sender, System.EventArgs e)
{
int id = int.Parse(Convert.ToString(this.lblID.Text));
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf='" + this.fTlf.Text + "', Dato='" + this.fDato.Text + "', Anerkendt=@anerkendt WHERE id=@id", conn);
OleDbParameter parameter = new OleDbParameter("@id", OleDbType.Integer);
parameter.Value = id; // altså integerid'et fra før
command.Parameters.Add(parameter);

OleDbParameter par = new OleDbParameter("@anerkendt", OleDbType.Boolean);
par.Value = fAnerkendt.Checked;
command.Parameters.Add(par);

conn.Open();
command.ExecuteNonQuery();
conn.Close();
}
}
}
----
Ville måske være rigtiger at bruge fx..
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@fTlf, Dato=fDato, Anerkendt=@anerkendt WHERE id=@id", conn);

Men så ved jeg ikke præsis hvordan skal parameter.Add for tekst-boksene skulle ser ud. Fx kunne jeg tænke mig:
command.Parameters.Add(@Tlf, OleDbType.VarChar).Value = fTlf.Text;

Eller skal være noget helt andet???

Mvh
Avatar billede snepnet Nybegynder
20. juli 2006 - 07:55 #3
Du bør generelt altid benytte parametre.
Hvordan går det når du debugger ned igennem.... Ser det fornuftigt ud?
Mvh
Avatar billede snepnet Nybegynder
20. juli 2006 - 08:00 #4
Og ja - det er normalt altid at anbefale at du benytter dig af parametre, og til tekst kan du godt benytte en VarChar type (går ud fra det er sådan en du har i basen), og du kan også give den en max-længde som den tredie parameter i constructoren.
Mvh
Avatar billede snepnet Nybegynder
20. juli 2006 - 08:02 #5
Denne her er for øvrigt lige i overkanten:
int id = int.Parse(Convert.ToString(this.lblID.Text));
lblID.Text er jo en string i forvejen, så det her burde kunne gøre det:
int id = int.Parse(lblID.Text);
Mvh
Avatar billede mema Nybegynder
20. juli 2006 - 17:12 #6
Jeg har brugt parametre på følgende måde. Desværre opdaterer den ikke databasen. Hverken for tekstbokse eller tjekboksen.
Jeg bruger Access databasen. Måske VarChar svarer ikke til Text som står i Access databasen?

aspx.cs filen ser nu såden ud (delvis - fbOpdater_Click metoden):

private void fbOpdater_Click(object sender, System.EventArgs e)
{
// får fat i dit id
int id = int.Parse(lblID.Text);
// og generér kommando
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@tlf, Dato=@dato, Anerkendt=@anerkendt WHERE id=@id", conn);
           
OleDbParameter parameter = new OleDbParameter("@id", OleDbType.Integer);
parameter.Value = id; // altså integerid'et fra før
command.Parameters.Add(parameter);
           
OleDbParameter parTlf = new OleDbParameter("tlf", OleDbType.VarChar);
parTlf.Value = fTlf.Text;
command.Parameters.Add(parTlf);

OleDbParameter parDato = new OleDbParameter("dato", OleDbType.VarChar);
parDato.Value = fDato.Text;
command.Parameters.Add(parDato);

OleDbParameter parAnerkendt = new OleDbParameter("@anerkendt", OleDbType.Boolean);
parAnerkendt.Value = fAnerkendt.Checked;
command.Parameters.Add(parAnerkendt);

conn.Open();
command.ExecuteNonQuery();
conn.Close();
}
---
Når jeg trykker på "Opdater" kanppen, springer siden op og ændringer står der stadigvæk, men faktisk er der ikke noget i databasen ændret!

Mvh
Avatar billede snepnet Nybegynder
20. juli 2006 - 17:59 #7
Kan du ikke prøve at debugge igennem det, og se hvad der sker.
Hvis du bruger Visual Studio sætter du et breakpoint ind ved at stille dig på en linie (f.eks. den første linie i din update metode), og trykke på F9.
Derefter starter du applikationen med F5.
Så stopper eksekveringen på dit breakpoint, og du kan tage det linie for linie med F10.
Du kan inspicere dine variable undervejs mv....
Mvh
Avatar billede mema Nybegynder
21. juli 2006 - 11:43 #8
Efter debugging får jeg følgende fejlmeddelelse:

{
Line 62:     command.Parameters.Add("@ID", typeof(int));
Line 63:     command.Parameters["@ID"].Value = int.Parse(Request.QueryString["ID"]);
Line 64:     command.Connection.Open();
Line 65:     using (OleDbDataReader reader = command.ExecuteReader())

Source File: c:\aspdotnet\webapps\eis\detaljer.aspx.cs    Line: 63

Men det handler om DataReader (den alleførste kode i denne side) som virker problemfrit. Så ved jeg slet ikke hvad kan være årsagen til debug-fejlmeddelelsen.

Mvh
Avatar billede snepnet Nybegynder
21. juli 2006 - 12:04 #9
Det er oplagt at den fejler her:
int.Parse(Request.QueryString["ID"]);
Hvis du starter programmet inde fra visual studio - har du sikkert ikke fået sat din querystring parameter.
Men du har ikke vist fejlmeddelelsen - kun dumpet af koden.... Der må være noget mere i den meddelelse du får op.
Mvh
Avatar billede mema Nybegynder
21. juli 2006 - 12:32 #10
Det hele fejlmeddelelse:

Server Error in '/aspdotnet/WebApps/EIS' Application.
--------------------------------------------------------------------------------

Value cannot be null. Parameter name: String
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentNullException: Value cannot be null. Parameter name: String

Source Error:

Line 61:             {
Line 62:     command.Parameters.Add("@ID", typeof(int));
Line 63:     command.Parameters["@ID"].Value = int.Parse(Request.QueryString["ID"]);
Line 64:     command.Connection.Open();
Line 65:     using (OleDbDataReader reader = command.ExecuteReader())

Source File: C:\AspDotNet\WebApps\EIS\Detaljer.aspx.cs    Line: 63

Stack Trace:

[ArgumentNullException: Value cannot be null.
Parameter name: String]
  System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +0
  System.Int32.Parse(String s) +38
  EIS.Detaljer.InsertFilValues() in C:\AspDotNet\WebApps\EIS\Detaljer.aspx.cs:63
  EIS.Detaljer.Page_Load(Object sender, EventArgs e) in C:\AspDotNet\WebApps\EIS\Detaljer.aspx.cs:51
  System.Web.UI.Control.OnLoad(EventArgs e)
  System.Web.UI.Control.LoadRecursive()
  System.Web.UI.Page.ProcessRequestMain()

Mvh
Avatar billede snepnet Nybegynder
21. juli 2006 - 13:09 #11
Det er formentlig bare som jeg skrev 21/07-2006 12:04:01
Mvh
Avatar billede mema Nybegynder
21. juli 2006 - 13:53 #12
Ja tak. men hvordan?

Jeg har fundet følgende på nettet, men det compilerer ikke:

protected int myID
{
get
{
object o=Request.QueryString["ID"];
if (o==null)
throw new
ApplicationException("ID is required to be passed");
else
try
{
return Convert.ToInt32(o,10);
}
catch(Exception err)
{
throw new ApplicationException("Invalid ID", err);
}
}
}

----------------------
Og her en gang til min aspx og aspx.cs filer. Måske hjælper det at finde ud af hvilke ændring skulle laves i min kode:

aspx:
--
%@ Page language="c#" Codebehind="Detaljer3.aspx.cs" AutoEventWireup="false" Inherits="EIS.Detaljer3" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Details3</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="Style.css" type="text/css" rel="stylesheet">
<SCRIPT language="JavaScript">
function Print()
{
window.print();
}
</SCRIPT>
</HEAD>
<body bgColor="#6a828b">
<form id="Form1" method="post" runat="server">
<P>
<TABLE id="Table2" borderColor="#000000" cellSpacing="0" cellPadding="1" width="720" align="center" bgColor="#eeffff" border="1"><TR><TD>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="718" align="center" bgColor="#eeffff" border="0"><TR>
<TD width="18"></TD>
<TD width="190"></TD>
<TD width="20"></TD>
<TD align="left" width="490"></TD>
</TR>
<TR>
<TD width="18" height="30"></TD>
<TD width="190" height="30"></TD>
<TD width="20" height="30"></TD>
<TD align="left" width="490" height="30"></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="190">ID:</TD>
<TD width="20"></TD>
<TD width="490"><asp:label id="lblID" runat="server" Width="200px"></asp:label></TD>
</TR>
<TR>
<TD style="HEIGHT: 16px" width="18"></TD>
<TD style="HEIGHT: 16px" width="190">Stoffets/produkts handelsnavn:</TD>
<TD style="HEIGHT: 16px" width="20"></TD>
<TD width="490"><asp:label id="lblNavn" runat="server"></asp:label></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="190">E-mail:</TD>
<TD width="20"></TD>
<TD width="490"><asp:label id="lblEmail" runat="server"></asp:label></TD>
</TR><TR>
<TD width="18" height="30"></TD>
<TD width="700" colSpan="3" height="30">
<P align="center"><IMG height="1" src="images/graaprik.gif" width="700"></P>
</TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="190">Tlf:</TD>
<TD width="20"></TD>
<TD width="490"><asp:textbox id="fTlf" runat="server" Width="200px"></asp:textbox></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="190">E-mail</TD>
<TD width="20"></TD>
<TD width="490"><asp:textbox id="fEmail" runat="server" Width="200px"></asp:textbox></TD>
</TR>
<TR><TD width="18"></TD>
<TD width="190">Anerkendt?</TD>
<TD width="20"></TD>
<TD width="490"><asp:checkbox id="fAnerkendt" runat="server" Text="Ja"></asp:checkbox></TD>
</TR>
<TR>
<TD width="18" height="30"></TD>
<TD width="190" height="30"></TD>
<TD width="20" height="30"></TD>
<TD width="490" height="30"></TD>
</TR><TR>
<TD width="18"></TD>
<TD width="190"></TD>
<TD width="20"></TD>
<TD width="490"><asp:button id="fbOpdater" runat="server" Width="80px" Text="Opdater"></asp:button>
<INPUT style="WIDTH: 80px; HEIGHT: 20px" onclick="Print();" type="button" value="Udskriv"    name="knap"></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="190"></TD>
<TD width="20"></TD>
<TD width="490"></TD>
</TR>
<TR>
<TD width="18" height="30"></TD>
<TD width="190" height="30"></TD>
<TD width="20" height="30"></TD>
<TD width="490" height="30"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</P>
</form>
</body>
</HTML>
----

aspx.cs:
--

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.IO;

namespace EIS
{
/// Summary description for Detaljer3.
   
public class Detaljer3 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblID;
protected System.Web.UI.WebControls.Label lblNavn;
protected System.Web.UI.WebControls.Label lblEmail;
protected System.Web.UI.WebControls.CheckBox fAnerkendt;
protected System.Web.UI.WebControls.TextBox fTlf;
protected System.Web.UI.WebControls.TextBox fEmail;
protected System.Web.UI.WebControls.Button fbOpdater;

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
InsertFilValues();
}
}
       
private void InsertFilValues()
{
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb")))
using (OleDbCommand command = new OleDbCommand("SELECT ID,Navn,Forhandler,File1,File2,File3,Begrundelse,Koebsdato,Fremstiller,DitNavn,Email,Tlf,Oenske_svar,Sagsbehandler,J_nr,Proevenr,Anerkendt FROM eis WHERE ID = @ID", connection))
{
command.Parameters.Add("@ID", typeof(int));
command.Parameters["@ID"].Value = int.Parse(Request.QueryString["ID"]);
command.Connection.Open();
using (OleDbDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
lblID.Text = reader.GetInt32(reader.GetOrdinal("ID")).ToString();
lblNavn.Text = reader["Navn"].ToString();
lblEmail.Text = reader["Email"].ToString();

fTlf.Text = reader["Tlf"].ToString();
fEmail.Text = reader["Email"].ToString();
if (reader["Anerkendt"].ToString().Equals("False"))
fAnerkendt.Checked = false;
else
fAnerkendt.Checked = true;                           
connection.Close();
}
}
}
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
InitializeComponent();
base.OnInit(e);
}

/// </summary>
private void InitializeComponent()
{   
this.fbOpdater.Click += new System.EventHandler(this.fbOpdater_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void fbOpdater_Click(object sender, System.EventArgs e)
{
int id = int.Parse(lblID.Text);
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@tlf, Email=@email, Anerkendt=@anerkendt WHERE id=@id", conn);
           
OleDbParameter parameter = new OleDbParameter("@id", OleDbType.Integer);
parameter.Value = id;
command.Parameters.Add(parameter);
           
OleDbParameter parTlf = new OleDbParameter("tlf", OleDbType.VarChar);
parTlf.Value = fTlf.Text;
command.Parameters.Add(parTlf);

OleDbParameter parEmail = new OleDbParameter("Email", OleDbType.VarChar);
parEmail.Value = fEmail.Text;
command.Parameters.Add(parEmail);
OleDbParameter parAnerkendt = new OleDbParameter("@anerkendt", OleDbType.Boolean);
parAnerkendt.Value = fAnerkendt.Checked;
command.Parameters.Add(parAnerkendt);

conn.Open();
command.ExecuteNonQuery();
conn.Close();
}       
}
}
---
Mvh
Avatar billede snepnet Nybegynder
21. juli 2006 - 14:04 #13
Du har et stykke kode der benytter en querystring-parameter:
command.Parameters["@ID"].Value = int.Parse(Request.QueryString["ID"]);
Den vil fejle hvis du ikke har angivet et ID i din querystring:
http://host/site/fil.aspx?ID=25 (bare for eksemplets skyld)

Den property implementering du har fundet på nettet medfører at der smides en exception, hvis der ikke er angivet et ID i querystring, men så skal du også benytte den når du skal bruge id'et:
command.Parameters["@ID"].Value = myID;

Du kan rette kompileringsfejlen i din property sådan her:
protected int myID
{
    get
    {
        object o = Request.QueryString["ID"];
        if (o == null)
        {
            throw new ApplicationException("ID is required to be passed");
        }
        else
        {
            try
            {
                return Convert.ToInt32(o.ToString());
            }
            catch (Exception err)
            {
                throw new ApplicationException("Invalid ID", err);
            }
        }
    }
}

Mvh
Avatar billede mema Nybegynder
21. juli 2006 - 16:26 #14
Hej igen,
Den Url du har sendt mig: http://host/site/fil.aspx?ID=25 redirectes til en urelevant side.

Men nu tror jeg nævne igen, at Detaljer.aspx hentes fra en HyperLinkColumn af en datagrid:
<asp:HyperLinkColumn Text="Detaljer" DataNavigateUrlField="ID" DataNavigateUrlFormatString="Detaljer.aspx?ID={0}">
<HeaderStyle Width="100px"></HeaderStyle>
<ItemStyle ForeColor="#666666"></ItemStyle>
</asp:HyperLinkColumn>
Og på denne måde åbnes den relevante url. Jeg kan heller ikke åbne Detaljer.aspx i browseren direkte. Men det var heller ikke meningen. Meningen var, at Detail-siden åbnes fra datagrid-siden, som beholder "ID"et.
Det med debugging og debugging-resultat måske har været misvisende og irreførrende.

Suma summarum det hele drejede sig at jeg ikke kunne opdatere Checkbox. Ellers var der ikke noget problem med at opdatere tekstbokse.

Sådan som der kan ses, i Detaljer.aspx er der 2 metoder. Den første er en DataReader som skriver nogle felter fra Access og den anden metode skulle opdatere nogle tekstbokse og nogle checkbokse.
Mvh
Avatar billede snepnet Nybegynder
21. juli 2006 - 21:32 #15
Url'en er blot et eksempel for hvordan den skal være opbygget - at den kan anvendes er en ren tilfældighed, men jeg vil næste gang prøve at gøre det mere klart hvad jeg mener.

Grunden til at jeg viste formen på url'en er, at du ikke har nævnt hvordan du åbner siden, og at du får en fejl der meget klart indikerer at siden fejler når den prøver at hente id'et fra url'en.
Men hvis du åbner siden direkte får du selvfølgelig fejlen, og du må når du debugger åbne mastersiden først, som du ellers ville have gjort.

Du har to gange skrevet at hverken checkboxe eller textboxe giver opdateringer i databasen, og det er det jeg har forholdt mig til.

Kan du ikke fortsætte med at debugge metoden, og fortælle hvad der sker når du kører koden?
Har dine variable de forventede værdier?
Ekskverer koden færdig, eller får du en fejl?
Osv...

Du har en divergens imellem de parameternavne du har i din sql, og dem du anngiver i dine parametre, hvilket du nok skal rette for god ro og ordens skyld
... Jeg tror egentlig det går godt når det blot er @ du mangler, men du kan lige så godt kalde dem det samme - så er den i hvert fald sikker.

Mvh
Avatar billede mema Nybegynder
22. juli 2006 - 00:39 #16
Jeg er meget ked af hvis jeg ikke have formuleret mit spørgmål klart og har prøvet at ændre (og se bort fra nogle andre tekstbokse og checkbokse) og dette har givet anledning til uklarhed.

Det med url'en har jeg nu forståend hvad du har ment. Misforståelse fra min side.

Den kode med:
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@tlf, Email=@email WHERE id=@id", conn);
(Jeg har rettet Dato til Email). I denne kode virker opdatering af tekstboksene ikke.

Men Når jeg ændrer koden til følgende (koden fra 20/07-2006 01:13:36 - hvor jeg har rettet Dato til Email):
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf='" + this.fTlf.Text + "', Email='" + this.fEmail.Text + "' WHERE id=@id", conn); (Also uden "Anerkendt", som er checkboks) så virker den (de 2 tekstbokse opdateres)!
I begge tilfælde er resten af koden det samme. Dvs. jeg bruger parametre efter dine anvisninger.

Efter debugging af koden får jeg ikke nogen fejlmeddelelse indtil metoden: fbOpdater_Click, så på alle linjer af denne metode får jeg den fejlmeddelelse med ...QueryString... som vi nu ved at det egentlig ikke er nogen fejl, fordi jeg linker til denne detail-side fra mastersiden.

I browseren får jeg følgende:
- Uden "Anerkendt" feltet får jeg ingen fejl og siden opdateres også med ovenståeden kode (koden fra 20/07-2006 01:13:36).
- Når jeg bruger denne kode:
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@tlf, Email=@email, Anerkendt=@anerkendt WHERE id=@id", conn);
(fordi jeg ved ikke hvordan jeg kunne bruge: Anerkendt='" + this.fAnerkendt.Checked + "'??)
og med tilføjelse af parametre:
OleDbParameter parAnerkendt = new OleDbParameter("@anerkendt", OleDbType.Boolean);
parAnerkendt.Value = fAnerkendt.Checked;
command.Parameters.Add(parAnerkendt);
får jeg compileret siden, men der sker ikke noget, når jeg ændrer på tekstfelterne eller checkbokse. Det vil sige, at jeg ikke får noget fejlmeddellese, men databasen opdateres ikke.

Mvh
Avatar billede snepnet Nybegynder
23. juli 2006 - 16:18 #17
Prøv sådan her:

int id = int.Parse(lblID.Text);
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand command = new OleDbCommand("UPDATE eis SET Tlf=@tlf, Email=@email, Anerkendt=@anerkendt WHERE id=@id", conn);

command.Parameters.Add("@tlf", OleDbType.VarChar);
command.Parameters["@tlf"].Value = fTlf.Text;

command.Parameters.Add("@email", OleDbType.VarChar);
command.Parameters["@email"].Value = fEmail.Text;

command.Parameters.Add("@anerkendt", OleDbType.Boolean);
command.Parameters["@anerkendt"].Value = fAnerkendt.Checked;

command.Parameters.Add("@id", OleDbType.Integer);
command.Parameters["@id"].Value = id;

conn.Open();
command.ExecuteNonQuery();
conn.Close();

Mvh
Avatar billede mema Nybegynder
24. juli 2006 - 14:14 #18
Hej snepnet,
Tusind tak. Det virker nu:-)

Jeg er meget glad, selv om jeg ikke kan finde ud af differencen mellem:
Ikke virkede:
OleDbParameter parTlf = new OleDbParameter("tlf", OleDbType.VarChar);
parTlf.Value = fTlf.Text;
command.Parameters.Add(parTlf);

Virker:
command.Parameters.Add("@tlf", OleDbType.VarChar);
command.Parameters["@tlf"].Value = fTlf.Text;

Send venligt svar.

Mvh
Avatar billede snepnet Nybegynder
24. juli 2006 - 20:27 #19
Det er egentlig ikke det der gør forskellen - kan bare bedre lide den variant.
Det er rækkefølgend parametrene tilføjes der gør at det virker.
Du kan selv efteprøve det ved at tilføje id-parameteren først.
Mvh
Avatar billede snepnet Nybegynder
24. juli 2006 - 20:28 #20
Og et svar :o)
Mvh
Avatar billede mema Nybegynder
24. juli 2006 - 23:10 #21
Mange tak igen.
Mvh
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