Hej jag har knåpat ihop en webbsida i Visual Studio och C#. Jag förstår inte riktigt uppdelningen du gjort i 2 metoder. I princip gör du samma sak två gånger. Försök detta först: Tack adec för att du tog dig tid, men fortfarande so jobbar sidan men inget kommer till databasen. Jag får inga som helst felmeddelanden att något är galet heller. Gerten, Hej Jalle. 1. För att se om knappen verkligen aktiverar funktionen kan du lägga en response.write i funktionen. Om det skrivs ut körs funktionen och om det inte skrivs ut så körs den inte. Nu har jag lagt till en EventHandler för knappen AddBtn, men får följande felmedd: Använd < code c#>< /code> så vi lättare kan läsa din kod. Ja, du, detta är mystiskt. Ända jag kan föreslå är att du gör en Response.Write(); på sökvägen till din DB och se så att du har en korrekt sökväg. Du kan också skippa HttpContext.Current i detta sammanhanget. Det räcker med Server.MapPath(). Du kan inte ha en knapp som heter AddBtn när din funktion heter AddBtn. Du måste ha olika namn på dem. Felet berättar att du definierar AddBtn mer än en gång vilket inte är så mystiskt. Om du ska använda variablerna KlubbNr och KlubbNamn så måste du deklarera dom och lägga in ett värde i dem. Som det är nu så är det bara två ord som inte finns någonannanstans i din kod. Vet inte om jag förstår dig riktigt, eller om du inte förstår mig. Men så här är det: Om du har visat all kod ovan, är detta de kontroller som finns och är deklarerade: Detta är den senaste uppdateringen efter ditt tillägg this.AddBtn.Click. Du skriver: Vill härmed passa på att tacka André och Patrik för hjälpen! Klickar på sänd och inget händer i Access db
Ett inmatningsformulär med code behind.
När jag klickar på skicka så uppdateras sidan men ingen data överförs till Access db.
Kan nån se vad jag har gjort för fel.
Här är koden:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace berlingolf
{
/// <summary>
/// Summary description for NyKund.
/// </summary>
public class AddNyKund : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button RegisterBtn;
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Literal ltlError;
protected System.Web.UI.WebControls.Table TableNewKund;
public AddNyKund()
{
//Page.Init += new System.EventHandler(Page_Init);
}
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
private void RegisterBtn_Click(int KlubbNr, string KlubbNamn)
{
string SqlCmd = "INSERT INTO Kunder(Klubbnr, KlubbNamn) VALUES (@KlubbNr,'@KlubbNamn')";
OleDbConnection myConn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("db/BerlinGolf.mdb"));
OleDbCommand myCmd = new OleDbCommand(SqlCmd,myConn);
myCmd.Parameters.Add(new OleDbParameter("@KlubbNr", OleDbType.Integer,10));
myCmd.Parameters["@KlubbNrVal"].Value = KlubbNr ;
myCmd.Parameters.Add(new OleDbParameter("@KlubbNamn", OleDbType.VarChar,50));
myCmd.Parameters["@KlubbNamnVal"].Value = KlubbNamn ;
myCmd.Connection.Open();
try
{
ExecuteNonQuery(SqlCmd);
//Response.Write SqlCmd;
//Response.End;
}
finally
{
myCmd.Connection.Close();
}
}
private void ExecuteNonQuery(string SqlCmd)
{
OleDbConnection conn = null;
try
{
conn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0; " +
@"Data Source=" + Server.MapPath("db/BerlinGolf.mdb"));
conn.Open();
OleDbCommand cmd =
new OleDbCommand(SqlCmd, conn);
cmd.ExecuteNonQuery();
}
finally
{
if (conn != null) conn.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>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ID = "AddNyKund";
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Tack på förhand
GertSv: Klickar på sänd och inget händer i Access db
private void RegisterBtn_Click(int KlubbNr, string KlubbNamn)
{
string SqlCmd = "INSERT INTO Kunder(Klubbnr, KlubbNamn) VALUES (@KlubbNr, @KlubbNamn)";
OleDbConnection myConn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("db/BerlinGolf.mdb"));
OleDbCommand myCmd = new OleDbCommand(SqlCmd,myConn);
myCmd.Parameters.Add(new OleDbParameter("@KlubbNr", OleDbType.Integer, 10));
myCmd.Parameters["@KlubbNrVal"].Value = KlubbNr ;
myCmd.Parameters.Add(new OleDbParameter("@KlubbNamn", OleDbType.VarChar, 50));
myCmd.Parameters["@KlubbNamnVal"].Value = KlubbNamn ;
//try
//{
myConn.Open();
myCmd.ExecuteNonQuery();
//}
//finally
//{
myConn.Close();
//}
}
Som du ser har jag kommenterat ut felhanteringen. Detta gör jag för att eventuella felmeddelanden skall synas om saker o ting inte går som jag tänkt mig. Ta bort kommenteringen när det funkar enligt plan. Ta också bort fnuttarna runt @KlubbNamn i sql satsen. De behövs inte när du använder parametrar.
Sv: Klickar på sänd och inget händer i Access db
Sv: Klickar på sänd och inget händer i Access db
Jag har ofta fått detta fel (Visual Studio 2002) på just Buttons eller LinkButtons. Av någon anledning verkar click_eventet "disablas" när man gjort vissa ändringar i designläge (bugg???). Jag brukar då:
1. Kopiera koden för click_eventet
2. Radera click_event koden
3. Skapa ett nytt click_event
4. Klistra tillbaka koden.
Då brukar det funka igen.
Hoppas detta löser ditt problem.
/JalleSv: Klickar på sänd och inget händer i Access db
Jag har Visual Studio 2003, vet inte om det är ngn skillnad eller om buggen fortfarande är kvar.
Det hjälpte iofs inte med det som du skrv. Tror jag börjar få tunnelseende.
GertSv: Klickar på sänd och inget händer i Access db
2. Har du någon event för OnClick på knappen så att den verkligen vet om att den ska köra funktionen. Antingen lägger du OnClick="RegisterBtn_Click" i din kontrolltagg eller så lägger man till en EventHandler för knappen och jag ser inte någon sådan i din kod.
Utan en eventhandler så körs ingen kod när man trycker på knappen.
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Klickar på sänd och inget händer i Access db
The class 'berlingolf.NyKund' already contains a definition for 'AddBtn'
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace berlingolf
{
/// <summary>
/// Summary description for NyKund.
/// </summary>
public class NyKund : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Table TableNewKund;
protected System.Web.UI.WebControls.Button AddBtn;
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Literal ltlError;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#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>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void AddBtn(object sender, System.EventArgs e)
{
string SqlCmd = "INSERT INTO Kunder(KlubbNr, KlubbNamn) VALUES (@KlubbNrVal, @KlubbNamnVal)";
OleDbConnection myConn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("dbs/BerlinGolf.mdb"));
OleDbCommand myCmd = new OleDbCommand(SqlCmd,myConn);
myCmd.Parameters.Add(new OleDbParameter("@KlubbNrVal", OleDbType.Integer, 10));
myCmd.Parameters["@KlubbNrVal"].Value = KlubbNr ;
myCmd.Parameters.Add(new OleDbParameter("@KlubbNamnVal", OleDbType.VarChar, 50));
myCmd.Parameters["@KlubbNamnVal"].Value = KlubbNamn ;
//try
//{
myConn.Open();
myCmd.ExecuteNonQuery();
//}
//finally
//{
myConn.Close();
//}
}
}
}Sv: Klickar på sänd och inget händer i Access db
Sv: Klickar på sänd och inget händer i Access db
Och var lägger du en eventhandler på din knapp?
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Klickar på sänd och inget händer i Access db
private void AddBtn_Click(object sender, System.EventArgs e)
Efter gjorda ändringar så händer följande :
Rad 62: The name 'KlubbNr' does not exist in the class or namespace 'berlingolf.NyKund'
Rad 64: The name 'KlubbNamn' does not exist in the class or namespace 'berlingolf.NyKund'
myCmd.Parameters.Add(new OleDbParameter("@KlubbNrVal", OleDbType.Integer, 10));
myCmd.Parameters["@KlubbNrVal"].Value = KlubbNr ;
myCmd.Parameters.Add(new OleDbParameter("@KlubbNamnVal", OleDbType.VarChar, 50));
myCmd.Parameters["@KlubbNamnVal"].Value = KlubbNamn ;
Sökte på Parameter Propertys och fann följande:
The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL Statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:SELECT * FROM Customers WHERE CustomerID = ?
Men med samma svar av debugen!
Testade att Byta ut KlubbNr mot ett värde och KlubbNamn till test, men tyvärr samma visa igen.
Dags att sova på saken, bättre lycka då. Skam den som ger sig!
Gert
Sv: Klickar på sänd och inget händer i Access db
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Klickar på sänd och inget händer i Access db
I Db så heter fälten KlubbNr och KlubbNamn, det är dit datan ska skickas.
Och i Formen sp heter TexBoxarna: KlubbNrVal och KlubbNrVal
GertSv: Klickar på sänd och inget händer i Access db
protected System.Web.UI.WebControls.Table TableNewKund;
protected System.Web.UI.WebControls.Button AddBtn;
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Literal ltlError;
Två Tabeller, en knapp och en Literal. Inga Textboxar finns, vare sig med namnen KlubbNrVal och KlubbNrVal, eller med något annat namn. Alltså, det finns inget som fyller variablerna KlubbNrVal och KlubbNrVal med värden (ex: string KlubbNrVal = KlubbNrVal.Text;). Det du beskriver är hur enkelt som helst och att du fortfarande inte har lyckats lokalisera felet tycker jag är anmärkningsvärt. Jag uppmanar dig att visa oss all kod. .aspx sida såväl som koden bakom. Visa också din datamodell (tabellen att inserta i) så jag kan testa detta på min egen maskin. Jag saknar vidare en Eventhandler för din AddBtn Click event. Denna skall deklareras i Page_Init/() > InitializeComponent() och se ut så här:
this.AddBtn.Click += new System.EventHandler(this.AddBtn_Click);
Sv: Klickar på sänd och inget händer i Access db
<code#>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace berlingolf
{
/// <summary>
/// Summary description for NyKund.
/// </summary>
public class NyKund : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Table TableNewKund;
protected System.Web.UI.WebControls.TextBox KundNrVal;
protected System.Web.UI.WebControls.TextBox KundNamnVal;
protected System.Web.UI.WebControls.Table Table1;
protected System.Web.UI.WebControls.Button AddBtn;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#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>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.AddBtn.Click += new System.EventHandler(this.AddBtn_Click);
}
#endregion
private void AddBtn_Click(object sender, System.EventArgs e)
{
string SqlCmd = "INSERT INTO Kunder(KlubbNr, KlubbNamn) VALUES (?,?)";
OleDbConnection myConn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("db/BerlinGolf.mdb"));
OleDbCommand myCmd = new OleDbCommand(SqlCmd,myConn);
myCmd.Parameters.Add(new OleDbParameter("KlubbNrVal", OleDbType.Integer, 10));
myCmd.Parameters["KlubbNrVal"].Value = "KlubbNr" ;
myCmd.Parameters.Add(new OleDbParameter("KlubbNamnVal", OleDbType.VarChar, 50));
myCmd.Parameters["KlubbNamnVal"].Value = "KlubbNamn" ;
myCmd.Parameters["KlubbNr"].Value =KlubbNrVal;
myCmd.Parameters["KlubbNamn"].Value = KlubbNamn;
try
{
myConn.Open();
myCmd.ExecuteNonQuery();
}
finally
{
Response.Write(SqlCmd);
Response.End();
myConn.Close();
}
}
}
}
</code>Sv: Klickar på sänd och inget händer i Access db
Fick detta felmeddelande nu. Vad betyder det?
System.NullReferenceException: Objektreferensen har inte angetts till en instans av ett objekt.
<code#>this.AddBtn.Click += new System.EventHandler(this.AddBtn_Click);</code>
Hälsningar
GertSv: Klickar på sänd och inget händer i Access db
<code>
OleDbCommand myCmd = new OleDbCommand(SqlCmd,myConn);
myCmd.Parameters.Add(new OleDbParameter("KlubbNrVal", OleDbType.Integer, 10));
myCmd.Parameters["KlubbNrVal"].Value = "KlubbNr" ;
myCmd.Parameters.Add(new OleDbParameter("KlubbNamnVal", OleDbType.VarChar, 50));
myCmd.Parameters["KlubbNamnVal"].Value = "KlubbNamn" ;
myCmd.Parameters["KlubbNr"].Value =KlubbNrVal;
myCmd.Parameters["KlubbNamn"].Value = KlubbNamn;
</code>
Det du gör här är att du sätter värdet på dina parametrar till "KlubbNr" och "KlubbNamn".
Sen sätter du värdet på två parametrar som inte finns, KlubbNr och KlubbNamn. Raderna ovan har du ju gett deom namnen KlubbNrVal och KlubbNamnVal.
Är inte KlubbNr ett talfält i databasen? Då kan du inte stoppa in textsträngen "KlubbNr" där.
För det andra, eftersom du har deklarerat dina textboxar:
<code>
protected System.Web.UI.WebControls.TextBox KundNrVal;
protected System.Web.UI.WebControls.TextBox KundNamnVal;
</code>
innehåller inte de värdena du vill stoppa in i databasen?
I så fall så:
<code>
myCmd.Parameters.Add(new OleDbParameter("KlubbNrVal", OleDbType.Integer, 10));
myCmd.Parameters["KlubbNrVal"].Value = KundNrVal.Text ;
myCmd.Parameters.Add(new OleDbParameter("KlubbNamnVal", OleDbType.VarChar, 50));
myCmd.Parameters["KlubbNamnVal"].Value = KundNamnVal.Text ;
</code>
Värdet i en TextBox hämtar man med minTextBox.Text.
Jag har sagt det förut och säger det igen, gå igenom exemplen i Tutorials på asp.net för det är väldigt grundläggande fel du gör nu. Jag tror att du behöver ta ett par steg tillbaka. Lägg den här koden åt sidan och börja om från början, en del i taget.Sv: Klickar på sänd och inget händer i Access db
Framför allt Andr´e som erbjöd sig hjälpen att fixa min sida så det blev rätt.
Har läst och studerat "Börja med C" av Karli Watson" men tycker mig inte finna detta grunläggande i webb programmering när det gäller Insert into. Att söka i db är ju relativt lätt jämfört med att skriv i en db.
Nu har jag iaf fått en grund utb i hur man gör med Insert Into.
Kan ngn rekomendera en bra bok dör man kan se lösningar o exempel av ordinära webblösningar.
Tack på förhand
Gert