PDA

View Full Version : [ASP.NET] Errore query sul server


voyager18
20-08-2007, 12:59
Ciao ho scritto questo codice in C#. E' una semplicissima applicazione web in ASP.NET che aggiunge un record in un database Access utilizzando la query SQL INSERT INTO. Sul mio PC ho installato il server di sviluppo ASP.NET della Microsoft e l'applicazione con quello funziona ma quando da Visual Studio 2005 la pubblico sul server web, arrivato all'istruzione ExecuteNonQuery() il server mi restituisce questo errore: Operation must use an updateable query.

Ecco il codice che ho scritto:

Questo è il codice sorgente della pagina (Default.aspx.cs):

using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Forum
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
Forum.components.mbdataaccess Pippo = new Forum.components.mbdataaccess(Server.MapPath("MessageDb.mdb"));
OleDbException ex;
ex = Pippo.addMessage("'Pippo'", "'Provatr'", "'Provas'", "'lopo@poli'", "'9'");
Label1.Text = ex.Message;
}
}
}

E quest'altro è il codice della classe 'mbdataaccess' contenuta nel namespace 'Forum.components' che ho scritto io:

using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Forum.components
{
public class mbdataaccess
{
private string ServerPath;
private string connection;

public mbdataaccess(string ServerPath)
{
this.ServerPath = ServerPath;
connection = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + ServerPath + ";" +
"Persist Security Info=False";
}

public OleDbException addMessage(string MsName, string MsMessage, string MsSubject, string MsEmail, string GpID)
{
string ID = "11";
string addMessage = "INSERT INTO Message " +
"(MsID, MsName, MsMessage, MsSubject, MsEmail, GpID, MsDate) " +
"VALUES (" + ID + ", " + MsName + ", " + MsMessage + ", " + MsSubject + ", " + MsEmail + ", " + GpID +", '777')";

OleDbConnection connAddMess = new OleDbConnection(this.connection);
OleDbCommand cmdAddMess = new OleDbCommand(addMessage, connAddMess);
cmdAddMess.CommandType = CommandType.Text;
connAddMess.Open();
try
{
cmdAddMess.ExecuteNonQuery();
}
catch (OleDbException ex)
{
return ex;
}
connAddMess.Close();
OleDbException e = null;
return e;
}
}
}

Aiutatemi!!

qwerty86
20-08-2007, 13:25
Ciao ho scritto questo codice in C#. E' una semplicissima applicazione web in ASP.NET che aggiunge un record in un database Access utilizzando la query SQL INSERT INTO. Sul mio PC ho installato il server di sviluppo ASP.NET della Microsoft e l'applicazione con quello funziona ma quando da Visual Studio 2005 la pubblico sul server web, arrivato all'istruzione ExecuteNonQuery() il server mi restituisce questo errore: Operation must use an updateable query.

Ecco il codice che ho scritto:

Questo è il codice sorgente della pagina (Default.aspx.cs):

using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Forum
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
Forum.components.mbdataaccess Pippo = new Forum.components.mbdataaccess(Server.MapPath("MessageDb.mdb"));
OleDbException ex;
ex = Pippo.addMessage("'Pippo'", "'Provatr'", "'Provas'", "'lopo@poli'", "'9'");
Label1.Text = ex.Message;
}
}
}

E quest'altro è il codice della classe 'mbdataaccess' contenuta nel namespace 'Forum.components' che ho scritto io:

using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Forum.components
{
public class mbdataaccess
{
private string ServerPath;
private string connection;

public mbdataaccess(string ServerPath)
{
this.ServerPath = ServerPath;
connection = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + ServerPath + ";" +
"Persist Security Info=False";
}

public OleDbException addMessage(string MsName, string MsMessage, string MsSubject, string MsEmail, string GpID)
{
string ID = "11";
string addMessage = "INSERT INTO Message " +
"(MsID, MsName, MsMessage, MsSubject, MsEmail, GpID, MsDate) " +
"VALUES (" + ID + ", " + MsName + ", " + MsMessage + ", " + MsSubject + ", " + MsEmail + ", " + GpID +", '777')";

OleDbConnection connAddMess = new OleDbConnection(this.connection);
OleDbCommand cmdAddMess = new OleDbCommand(addMessage, connAddMess);
cmdAddMess.CommandType = CommandType.Text;
connAddMess.Open();
try
{
cmdAddMess.ExecuteNonQuery();
}
catch (OleDbException ex)
{
return ex;
}
connAddMess.Close();
OleDbException e = null;
return e;
}
}
}

Aiutatemi!!

cmdAddMess.ExecuteNonQuery(); al posto di ExecuteNonQuery(); c'è qualcosa che inizia per update?? se c'è prova quello

voyager18
20-08-2007, 14:28
come puoi vedere dal mio codice io ho scritto cmdAddMess.ExecuteNonQuery(); però mi da quell'errore.

qwerty86
20-08-2007, 14:33
come puoi vedere dal mio codice io ho scritto cmdAddMess.ExecuteNonQuery(); però mi da quell'errore.

non c'è qualcosa del tipo update?

voyager18
20-08-2007, 14:35
c'è cmdAddMess.UpdatedRowSource ma è una proprietà non un metodo!

0rph3n
20-08-2007, 15:06
probabile problema di permessi.
controlla se l'utente "internet guest account" (o il gruppo everyone del quale fa parte) ha il permesso di scrittura sia sul file mdb che sulla cartella che lo contiene! in caso negativo assegnalo e riprova, in caso positivo boh, ne riparleremo :)

'iao

0rph3n
20-08-2007, 15:09
ah, controlla anche che il file non sia in sola lettura!
ah 2, le eccezioni non si usano così!

'iao

voyager18
20-08-2007, 15:16
ho aggiunto il gruppo everyone e gli ho assegnato tutti i permessi per la scrittura e lettura del file. però ancora mi da quell'errore Operation must use an updateable query.

se vuoi vai sul direttamente sul sito e clicca sul bottone che contiene le operazioni di aggiunta del record così vedi direttamente il messaggio di errore che restituisce il server. l'indirizzo è questo:

http://www.hobbyelettronica.it

0rph3n
20-08-2007, 15:50
hai controllato se il file è in sola lettura?
sei sicuro di non violare alcun vincolo referenziale con quella query?

0rph3n
20-08-2007, 16:02
mi sa che ho cannato utente :fagiano: :D
l'utente corretto a cui assegnare i privilegi dovrebbe chiamarsi "ASPNET"

voyager18
22-08-2007, 09:27
allora nessuno mi sa aiutare??? :confused: