Jag har en väldigt enkel windows Access databas Db.mdb. Den innehåller endast en tabell "General". Vad står det i felmeddelandet? Prova att köra fill-metoden utan att ange tabellen "General". Ändra catchen enligt nedan och ge oss felmeddelandet. (Notera att sökvägen som jag angav i koden ovan var avsiktligt nerkortad) Jag har testat med en annan databas och med den funkar det. Intressant! Ganska svårt att komma på om man inte känner till det... :) Här finns en lista med fler reserverade ord, kan vara bra att känna till: http://www.pellesoft.se/area/articles/article.aspx?artid=410 Du kan också skriva "SELECT * FROM [General]" så kommer det att fungera. Se listan som Johan postade för vilka ord som är reserverade som du antingen måste byta namn på eller sätta hakparenteser runt.DataAdapter.Fill( DataSet )
Jag får felmeddelande när DataSet:et ska fyllas med tabellen från databasen.
Något förslag på vad som är fel?
public FillDataBase()
{
string tableGeneral = "SELECT * FROM General";
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=C:\Data\STM\Report\Db.mdb";
OleDbDataAdapter da = new OleDbDataAdapter(tableGeneral, con);
try
{
con.Open();
DataSet dSGeneral = new DataSet();
da.Fill(dSGeneral, "General"); ////////////////////////////Här blir det fel.
}
catch (Exception)
{
MessageBox.Show("Failed to connect to data source");
}
finally
{
con.Close();
}
}
Sv: DataAdapter.Fill( DataSet )
Sv: DataAdapter.Fill( DataSet )
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
[Edit : Gissning, skrivskydd på databas-filen? Rätt behörigheter? Eftersom du lyckas öppna anslutningen och inte har några relationer el dylikt i datasetet så finns det inte så mycket som kan gå fel. Antingen finns inte tabellen General, eller så har du skrivskydd på filen. Något annat kan jag inte komma på...]
Sv:DataAdapter.Fill( DataSet )
Detta är felmeddelandet:
"System.Data.OleDb.OleDbException: Syntax error in FROM clause.\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)\r\n at STM.Report.FillDataBase..ctor() in c:\\data\\peter\\stm (spintestmanager)\\stm\\report\\filldatabase.cs:line 27"
/PeterSv: DataAdapter.Fill( DataSet )
Jag har undersökt min felaktiga databas, men jag lyckas inte hitta felet. Tabellen "General" finns med och jag kan inte se att den är skrivskyddad.
Jag kanske ska tillägga att jag är total rookie på Access, kanske har jag missat något väldigt fundamentalt. Sv:DataAdapter.Fill( DataSet )
Det är tabellens namn "General" som tydligen inte funkar att använda! Byter jag ut det mot något annat namn så funkar det. Och ändrar jag tillbaka tabellnamnet till "General" så skiter det sig igen.
Hyffsat otippat!
Tack för er hjälp.
/PeterSv: DataAdapter.Fill( DataSet )
/JohanSv: DataAdapter.Fill( DataSet )