05. december 2004 - 18:24Der er
16 kommentarer og 1 løsning
skriv til database i ASP.NET
Er der ikke et sted hvor man kan hente et komplet eksempel på hvordan man skriver til en access database i ASP.NET, gerne meget simpelt, jeg kan nemmelig ikke få det til at virke!
// code-behind : 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; using System.Web.Mail;
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;
// 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 at checke ds.Tables[0].Rows[0]["SomeString"] = "En ny tekst"; OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adapter); adapter.Update(ds);
// og lidt til fremvisning her DataGrid someGrid = new DataGrid(); someGrid.DataSource = ds; someGrid.DataBind();
// ind med griddet ... Form1.Controls.Add(someGrid); }
// lidt fesent - men det er bare demo catch (Exception ex) { Response.Write(ex.Message); } }
I eksemplet ligger databasen så en i folder (data) under web-projektet, og hvis du skriver din email-adresse her - skal jeg sende dig basen (det er bare en rimelig ligegyldig testbase).
Dim strConn As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="& Server.Mappath("/asp.net/test/data/data2.mdb") & ";User Id=admin;Password=;" Dim objConn As New OleDbConnection(strConn) Dim objCmd As New OleDbCommand("INSERT INTO billeder (image,dato,userid) VALUES ('test','test','test')", objConn) objConn.Open() objCmd.ExecuteNonQuery() objConn.Close()
det er først når den går igang med at skrive til databasen den kommer:
Server Error in '/' Application. --------------------------------------------------------------------------------
Syntax error in INSERT INTO statement. 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.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement.
Source Error:
Line 85: Dim objCmd As New OleDbCommand("INSERT INTO billeder (image,dato,userid) VALUES ('test','test','test')", objConn) Line 86: objConn.Open() Line 87: objCmd.ExecuteNonQuery() Line 88: objConn.Close() Line 89:
-------------------------------------------------------------------------------- Version Information: Microsoft .NET Framework Version:1.1.4322.573; ASP.NET Version:1.1.4322.573
der bliver også lavet en fil der hedder data.ldb som først forsvinder efter et stykke tid...
Som den skriver er det en fejl i dit SQL statement. Normalt vil man gemme "image" som et image-id og dermed en int, "dato" som en date, og "userid" vil også være en int. Men i dit statement indsætter du tre strings. Prøv istedet med:
"INSERT INTO billeder (image,dato,userid) VALUES (1,2004-12-05,3)"
Hvordan ser den tabel ud, du prøver at indsætte i? Hvilke datatyper forventer den?
ok, nu fik jeg det delvist til at virke, nu kan den da skrive til databasen! jeg skrev bare: Dim objCmd As New OleDbCommand("INSERT INTO billeder ([image],[dato],[tekst],[userid]) VALUES ('test','test','test','test')", objConn)
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.