23. september 2004 - 21:53Der er
48 kommentarer og 2 løsninger
Forbindelse / opdatering af database
Nu er jeg ved at rode mig rigtigt langt ud, jeg har været ved at klippe/klistre i noget kode fra en bog og det går naturligvis galt. Se jeg kunne også tænke mig at vide om der ikke er en nem metode til at forbinde f.eks en knap med en database i VS.NET? I stedet for at håndkode det? Jeg får her den ene fejl efter den anden, lige nu brokker den sig over linie 69 som er meget simpel : dbConnection.Open(); Nu skal jeg jo nok ændre værdien på min cookie men hvad bør den være? Hele smøren kommer her:
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;
namespace empty { /// <summary> /// Summary description for WebForm1. /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblRegister; protected System.Web.UI.WebControls.TextBox txtEmailAddress; protected System.Web.UI.WebControls.Button btnRegister; protected System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1;
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.btnRegister.Click += new System.EventHandler(this.btnRegister_Click); this.Load += new System.EventHandler(this.Page_Load);
} #endregion bool CheckFanEmailAddresses(string fanEmail) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; "+ "Data Source:D\\Bases\\Database\\WroxUnited.mdb"; System.Data.IDbConnection dbConnection= new System.Data.OleDb.OleDbConnection();
string queryString = "SELECT COUNT([Fans].[FanEmail]) FROM [Fans] WHERE ([Fans].[FanEmail] = @FanEmail)"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
//Check whether the email address is already registered //If not, we need to register it by calling the AddNewFanEmail() method if (!CheckFanEmailAddresses(FanEmail)) { AddNewFanEmail(FanEmail); }
// Email has been registered, so update the display and attempt write to a cookie txtEmailAddress.Visible = false; lblRegister.Text = "You have successfully registered for email updates"; btnRegister.Visible = false;
int AddNewFanEmail(string fanEmail) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; "+ "Data Source:D\\Bases\\Database\\WroxUnited.mdb"; System.Data.IDbConnection dbConnection= new System.Data.OleDb.OleDbConnection();
string queryString = "INSERT INTO [Fans] ([FanEmail]) VALUES (@FanEmail)"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
denne her ser ikke god ud : string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; "+ "Data Source:D\\Bases\\Database\\WroxUnited.mdb";
snepnet - - -> jeg har indsat din kode (med kolon 8>)) men den brokker sig stadig over linie 69? Nu kn det godt være at jeg har rodet for meget med det i dag 8( men hvad mener du med "Og når connection string er rettet så skal den nok angives som argument til connection constructor !" kan du pinde den ud så et gammelt fjols kan fatte det? (ja mig altså)
Det virker 8>) i alt fald her lokalt, jeg vil lige smide det op på nettet bare for sjov. Men hvordan burde jeg have grebet det an hvis jeg var startet fra bunden i VS og skulle oprette forbindelse til min database? jeg kan se at der er forskellige kommandoer man kan bruge i toolboxen. Det er bare lidt svært at overskue hvordan det virker, jeg anvender access databaser som det er lige nu.
ok nu driller det lidt, når jeg har den online kommer der en fejl, jeg har i min Default.aspx.cs denne sti: "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4;Data Source=D:\\www\\Bases\\Database\\WroxUnited.mdb";
Men som det kan ses er det som om at ændringen ikke er registreret på serveren, jeg har uploadet den nye fil, hvad kan evt. drille her?
[OleDbException (0x80004005): 'D:\Bases\Database\WroxUnited.mdb' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.] System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20 System.Data.OleDb.OleDbConnection.InitializeProvider() +57 System.Data.OleDb.OleDbConnection.Open() +203 empty.WebForm1.CheckFanEmailAddresses(String fanEmail) in d:\webdesign\experiments folder\experiments\default.aspx.cs:69 empty.WebForm1.btnRegister_Click(Object sender, EventArgs e) in d:\webdesign\experiments folder\experiments\default.aspx.cs:96 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1277
er det sådan et helt almindeligt public site du har... der er nogle gange nogle der forbereder specifikke kataloger at lægge sine db-filer ol. i. er du sikker på at D:\bases\... er gangbar, og at der er adgang til at du kan læse i den ?
hmmmmmm... problemet er at den ikke vil compilere når jeg har www i min sti, når jeg oploader min bin nu kommer den og brokker sig over at den ikke kan loade WebForm1
Line 1: <%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="empty.WebForm1" %> Line 2: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > Line 3: <HTML>
du kan evt. sende mig din code-behind som den ser ud nu.... så skal jeg nok rette dit pagedirective til. (altså den her : <%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="empty.WebForm1" %>)
nææ jeg har intet omdøbt, jeg har kun ændret min sti, nu har jeg forsøgt at ændre den tilbage for at få skidtet til at compilere men nu brokker den sig over at : D:\WebDesign\Experiments folder\Experiments\Default.aspx.cs(118): Cannot implicitly convert type 'System.Data.OleDb.OleDbConnection' to 'string'
og: D:\WebDesign\Experiments folder\Experiments\Default.aspx.cs(132): The type or namespace name 'dbConnection' could not be found (are you missing a using directive or an assembly reference?) Hele min code behind er her, det er mægtigt pænt af dig snepnet og jeg vil være glad for om du kan fortælle mig hvad jeg gør galt, det lader til at jeg kan lære mere her end i skolen 8(
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;
namespace empty { /// <summary> /// Summary description for WebForm1. /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label lblRegister; protected System.Web.UI.WebControls.TextBox txtEmailAddress; protected System.Web.UI.WebControls.Button btnRegister; protected System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1;
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.btnRegister.Click += new System.EventHandler(this.btnRegister_Click); this.Load += new System.EventHandler(this.Page_Load);
} #endregion bool CheckFanEmailAddresses(string fanEmail) { string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4;Data Source=D:\\Bases\\Database\\WroxUnited.mdb"; System.Data.IDbConnection dbConnection= new System.Data.OleDb.OleDbConnection(connectionString);
string queryString = "SELECT COUNT([Fans].[FanEmail]) FROM [Fans] WHERE ([Fans].[FanEmail] = @FanEmail)"; System.Data.IDbCommand dbCommand = new System.Data.OleDb.OleDbCommand(); dbCommand.CommandText = queryString; dbCommand.Connection = dbConnection;
//Check whether the email address is already registered //If not, we need to register it by calling the AddNewFanEmail() method if (!CheckFanEmailAddresses(FanEmail)) { AddNewFanEmail(FanEmail); }
// Email has been registered, so update the display and attempt write to a cookie txtEmailAddress.Visible = false; lblRegister.Text = "You have successfully registered for email updates"; btnRegister.Visible = false;
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4;Data Source=D:\\WWW\\Bases\\Database\\WroxUnited.mdb"; System.Data.IDbConnection dbConnection = new System.Data.OleDb.OleDbConnection(connectionString);
når jeg fjerner domænet fra min sti får jeg følgende
[OleDbException (0x80004005): 'D:\www\Bases\Database\WroxUnited.mdb' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.] System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20 System.Data.OleDb.OleDbConnection.InitializeProvider() +57 System.Data.OleDb.OleDbConnection.Open() +203 empty.WebForm1.CheckFanEmailAddresses(String fanEmail) in d:\webdesign\experiments folder\experiments\default.aspx.cs:69 empty.WebForm1.btnRegister_Click(Object sender, EventArgs e) in d:\webdesign\experiments folder\experiments\default.aspx.cs:96 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1277
ja, den ligger på D og det er på mit domæne empty-site.org. jeg har nogle gamle sider i ASP 3 og de virker med stien som vi har her. Når jeg fjerner domænet fra stien så kommer denne fejl [OleDbException (0x80004005): 'D:\www\Bases\Database\WroxUnited.mdb' is not a valid path.
Jeg har haft fat i min ISP og stien skulle være rigtig, jeg har set efter om noget skulle være skrivebeskyttet men det er ikke tilfældet, jeg prøver at flytte databasen ud af mapperne for at se om det hjælper.
snepnet - - - > Jeg er helt grøn med VS, var det muligt, hvis jeg lover på mine grædende knæ (hvordan det nu ser ud) ikke at misbruge det at lave en session via messsenger? Jeg er ikke helt med på hvordan jeg "smide din access-fil ind i projektet, og tage fat i den med Server.MapPath(...)" Jeg er her nok først eftermiddag eller aften, skal mure lidt i dag 8(
tjoh - det kan vi da godt sige. hvis du smider dit nummer herud, skal jeg nok "ringe" :o)
men... indtil videre kan du se denne kode. den fungerer under forudsætning af at databasen ligger i folderen data under webbet (det har ikke noget betydning for koden hvorvidt databasen er en del af din solution eller ej, men det kan være meget praktisk).
nå - men here it goes :
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.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
namespace AccessProject { public class _Default : System.Web.UI.Page { // connectionstring for formattering private string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};User Id=admin;Password=;";
// serverformen på siden protected HtmlForm Form1;
// datagrid for fremvisning protected DataGrid someGrid;
// kommandoobjekt OleDbCommand command = new OleDbCommand("SELECT * FROM TblSomething", connection);
// og en adapter OleDbDataAdapter adapter = new OleDbDataAdapter(command);
try { // hent data til dataset DataSet ds = new DataSet("SomeDataSet"); adapter.Fill(ds);
// lille opdatering - bare for sjov ds.Tables[0].Rows[0]["SomeString"] = "En ny tekst"; OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adapter); adapter.Update(ds);
// og lidt til fremvisning her someGrid = new DataGrid(); someGrid.DataSource = ds; someGrid.DataBind(); Form1.Controls.Add(someGrid); }
arne og snepnet , lad os nu se nogle svar så jeg ikke glemmer at lukke denne, jeg fik det til at virke med samme kode men ved at lave en mappe i roden og så lægge databasen her. Men tusind tak for som altid venlig og kvalificeret hjælp. Håber i har haft en god søndag!
det er da muligt Arne, jeg er 46 og det er ikke nemt at begynde på programmering i den alder, ikke for mig i alt fald men spændende det er det. Mulighederne syntes ubegrænsede. Problemerne ligeså, hvergang jeg lærer noget melder der sig nye spørgsmål og vores lærer er som tidligere nævnt ikke så hurtig til at svare, ind i mellem går der så lang tid at man har glemt hvad man spurgte om, derfor tak og lov for jer. Det er p*sse irreterende når man sidder og bokser med noget og ikke kan komme videre, så lad mig bare benytte lejligheden til at takke for den hjælp jeg har fået, det betyder mere end du kan forstille dig!
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.