Som ny på .NET & ACCESS så får man ibland simpla fel som är omöjliga att lösa... Det första jag kommer att tänka på är att prova göra om DateTime variabel till en sträng, har haft något liknande problem med just Access att det är lite tjurigt när det gäller C# och DateTime. Jag tror inte OLEDB 4 providern stödjer replace.Problem med att sätta in datum i Accessdatabas
Jag vill just nu helt enkelt lägga in unika ip-adresser för varje dag i databasen (Access Vista men sparad i 2003 format)
String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/projekt/akustikmontage/db/akustik.mdb;";
OleDbConnection myConnection = new OleDbConnection( connectionString );
/* insert unique users */
DateTime today = System.DateTime.Today;
String visitorIP = Request.UserHostAddress;
String sqlUnique = "REPLACE INTO Visitors (ip, visitDate) VALUES ('" + visitorIP + "', #" + today + "#)";
Response.Write("SQL: " + sqlUnique); // För att testa SQL-frågan
OleDbDataAdapter myAdapter = new OleDbDataAdapter( sqlUnique, myConnection );
Använder mig av Visual Web Developer Express och testkör genom den, har ingen direkt IIS. Däremot så fungerar kopplingen på ett annat ställe för att hämta data.
ASP.NET & C#
[Edit: Formatet på datumfältet i Access är General Date]
Sv: Problem med att sätta in datum i Accessdatabas
En annan idé som jag fick när jag kollde på din SQL-kod så är jag osäker på om Access stöder kommandot Replace, kolla dokumentationen för Access om detta stämmer. Om Access inte stöder Replace får du väll köra Update Set och om IP-nr inte finns i databasen får du köra en Insert Into istället.
Detta är det som jag kom att tänka på direkt, kan vara något helt annat!Sv:Problem med att sätta in datum i Accessdatabas
Sedan tycker jag inte om att du konkratenerar in värdena. Detta är ett sårbart sätt att lösa det på. Bättre att använda ett Command objekt och parametrar:
String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:/projekt/akustikmontage/db/akustik.mdb;";
OleDbConnection myConnection = new OleDbConnection(connectionString);
String sqlUpdate = "UPDATE Visitors SET visitDate = ? WHERE ip = ?";
OleDbCommand myCommand = new OleDbCommand(sqlUpdate, myConnection);
OleDbParameter DateParameter = new OleDbParameter("@Date", OleDbType.Date);
DateParameter.Value = System.DateTime.Today;
myCommand.Parameters.Add(DateParameter);
OleDbParameter IPParameter = new OleDbParameter("@Ip", OleDbType.VarChar);
IPParameter.Value = Request.UserHostAddress;
myCommand.Parameters.Add(IPParameter);
/* update unique users */
if (myCommand.ExecuteNonQuery() == 0)
{
myCommand.CommandText = "INSERT INTO Visitors (visitDate, ip) VALUES (?, ?)";
/* insert unique users */
myCommand.ExecuteNonQuery();
}
Är inte testad men visar principen som bör fungera.