13. november 2005 - 17:14Der er
38 kommentarer og 2 løsninger
INSERT i en Access database med ASP.NET
Når jeg forsøger at indsætte en record i en Access database via ASP.NET kode på en webserver, får jeg en fejl som beskrevet i http://www.eksperten.dk/spm/658458. Nu har jeg fundet årsagen og løsningen, men jeg kan ikke få løsningen til at fungere - derfor et nyt spørgsmål.
Har en anden idé.. prøv lige det her.. her er koden lagt som script på selve html siden. Om din insert side er i vb eller c# kan vel være ligegyldigt (jeg kan ikke vb desværre)..
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="iso-8859-1" Debug="true" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script language="c#" runat="server"> void Button2_Click(object sender, System.EventArgs e) { { bool gennemfoert=false; string strDSN=@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="; strDSN+=Server.MapPath("//db//cafe.mdb"); OleDbConnection myConn = new OleDbConnection(strDSN); string sql = "Insert into arg (overskrift, indhold) Values (@overskrift, @indhold)"; OleDbCommand insertCommand = new OleDbCommand(sql,myConn); if((overskrift.Text!="")&(argIndhold.Text!="")) { insertCommand.Parameters.Add("@overskrift",OleDbType.VarChar).Value = overskrift.Text; insertCommand.Parameters.Add("@indhold",OleDbType.VarChar).Value = argIndhold.Text; try { myConn.Open(); insertCommand.ExecuteNonQuery(); gennemfoert=true; } catch { Response.Write("Fejl try/catch"); } finally { myConn.Close(); } } else Response.Write("FEJL! Ikke alle tekstfelter er udfyldt.");
Jeg har netop lavet en simpel app, der kun laver INSERT. Det mærkelige er, at samme fænomen optræder hos min private host (BuyDomains) og på mit firmas server, så det er helt uafhængigt.
Nu virker det! Jeg forstår ikke, hvorfor det jeg gjorde, fik det til at virke, så derfor vil jeg skrive det HELT som jeg gjorde (det er nemlig et utroligt forløb):
1/ På sikkerhedsfanen kunne jeg se, at maskinnavn\ASPNET havde Read&Execute, Read og Write (denne write havde jeg tidligere givet den uden at det hjalp).
2/ Jeg gav nu Full Control og Modify.
3/ Nu kunne INSERT finde sted.
4/ Jeg tog nu Full Control af.
5/ INSERT virkede.
6/ Jeg tog nu Modify af.
7/ INSERT virkede.
Dvs. jeg er nu helt tilbage ved de rettigheder, som den havde, da det IKKE virkede - kan du forklare det?
Den kode, jeg kan få til at virke nu, er min egen oprindelige:
Dim Sti As String
Sti = server.mappath("Test.mdb") Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Sti & ";") objConn.Open()
Dim SQLTekst As OleDbCommand Dim strSQL As String strSQL = "INSERT INTO tblTest (F1, F2) VALUES ('Susanne', 'Kjær')" SQLTekst = New OleDbCommand(strSQL, objConn) SQLTekst.ExecuteNonQuery objConn.Close
Din sidsttilsendte giver stadig fejl - også selv om de to sidste rettigheder tilvælges.
det kunne tyde på at der er problemer med at læse fra mappen db ligger i. da der er lavet try catch og den melder at den ikke kan åbne db må det jo være det samme problem. I din test app ligger db jo i roden. Prøv at lave samme trick som du gjore på den mappe din oprindelige db ligger i
Dim strConn As String Dim objConn As OleDbConnection Dim objComm As OleDbCommand Dim objRs As OleDbDataReader
Sub Page_Load() smartnavigation="true" strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("test.MDB") & ";" objConn = New OleDbConnection(strConn) End Sub
Sub btnDelete_Click(sender As Object, e As EventArgs) Dim strSQL as string Dim Clientno as integer
objConn.Open()
strSQL="DELETE from Clients where Clientno =" & txtClientno.text & ";" 'response.write(strsql) objComm = New OLEDBcommand(strSQL, objConn) objComm.ExecuteNonQuery()
Show_Confirmation(Clientno)
objConn.Close() End Sub
Sub Show_Confirmation(Clientno) lblMessage.text += "<hr><table width='80%' border='0' cellspacing='2' cellpadding='2' class='tekst'><tr>" lblMessage.text += "<td>The client with the number</td></tr>" lblMessage.text += "<tr><td><strong>" & txtClientno.text & "</strong></td></tr>" lblMessage.text += "<tr><td>has now been permanently removed</td></tr></table><hr>" End Sub
innercitydk -> Jeg kan desværre ikke prøve det samme af på den første kode, da den ligger hos BuyDomains og her kan jeg ikke stille på sikkerheden. Jeg har lavet samme forsøg med en db, der ligger et andet sted end .aspx og her er det åbenbart også sådan, at den skal op at 'runde' fulde rettigheder og så kan man tage dem af igen til en tilstand, hvor det først ikke virkede. Gud ved, hvad forklaringen er på det?
elvstine -> Problemet var/er, at udførelse af objComm.ExecuteNonQuery() gav beskeden Operation must use an updateable query.
Jeg havde samme problem på min lokalserver, men alt virkede da jeg loadede det op. Så hvis det ikke virker hos BuyDomains må det da være hos dem fejlen ligger. Jeg bruger needhost og der funker det!
Ja - det vil jeg også mene. Det kan jo blive nødvendigt at skifte, hvis de ikke kan rette adgangen. Needhost ser godt nok billige ud - og det er godt nok?
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.