Jag ska lägga in information i en accessdatabas via Microsoft Visual Studio, en windows application. Test 1 borde se ut ungefär så här: <b> string insertSQL = "INSERT INTO Film (imdb, titel, regissör) VALUES (imdb, titel,regissör)"; </b> Tack så mycket för era svar. Har äntligen fått till hur man lägger in informationen så att det blir rätt,Nybörjarproblem med inläggning av information i en accessdatabas via odbc.
jag ska använda mig av Odbc. Jag har testat att göra på lite olika sätt och vis. Däremot kommer jag inte någon vart över huvudtaget när det handlar om att lägga in information.
Test 1:
public void LaggtillFilm(string imdb,string titel,string regissör)
{
using (OdbcConnection connection = conn1)
{
string insertSQL = "INSERT INTO Film (imdb, titel, regissör) VALUES (imdb, titel,regissör)";
OdbcCommand command = new OdbcCommand(insertSQL, connection);
connection.Open();
command.ExecuteNonQuery();
connection.Open();
}
}
Då fick jag felmeddelandet: ERROR [07002] [Microsoft][ODBC-drivrutin för Microsoft Access]
För få parametrar angavs. 3 förväntades.
Test 2:
public void LaggtillFilm(string imdb,string titel,string regissör)
{
OdbcConnection conn = conn1;
conn.Open();
OdbcCommand Command = new OdbcCommand(
"INSERT INTO Film(imdb, titel, regissör) " +
"VALUES(imdb, titel, regissör)", conn);
Command.Parameters.AddWithValue("imdb", imdb);
Command.Parameters.AddWithValue("titel", titel);
Command.Parameters.AddWithValue("regissör", regissör);
Command.ExecuteNonQuery();
conn.Close();
}
Då fick jag felmeddelandet: ERROR [07002] [Microsoft][ODBC-drivrutin för Microsoft Access]
För få parametrar angavs. 3 förväntades.
Test 3:
public void LaggtillFilm(string imdb,string titel,string regissör)
{
conn1.Open();
OdbcCommand command = laggtillfilm1.ExecuteNonQuery();
conn1.Close();
}
laggtillfilm1 är då ett OdbcCommand som innehåller SQL satsen
" INSERT INTO Film
(imdb, titel, regissör)
VALUES (?, ?, ?)"
Men då får jag ist felmeddelandet: Error Cannot implicitly convert type 'int' to 'System.Data.Odbc.OdbcCommand'
Test 4:
public void LaggtillFilm(string imdb,string titel,string regissör)
{
conn1.Open();
laggtillfilm1.ExecuteNonQuery();
conn1.Close();
}
Då fick jag felmeddelandet : ERROR [07002] [Microsoft][ODBC-drivrutin för Microsoft Access]Felaktigt COUNT-fält trots att alla tre fälten är deklarerade som datatypen text i access.Sv: Nybörjarproblem med inläggning av information i en accessdatabas via odbc.
<code>
public void LaggtillFilm(string imdb,string titel,string regissör)
{
using (OdbcConnection connection = conn1)
{
string insertSQL = String.Format("INSERT INTO Film (imdb, titel, regissör) VALUES ('{0}', '{1}','{2}')",imdb,titel,regissör);
OdbcCommand command = new OdbcCommand(insertSQL, connection);
connection.Open();
command.ExecuteNonQuery();
connection.Open();
}
}
</code>
Men då måste du akta dig för SQL-injection...
Test 2 tror jag beror på att man inte kan namnge parametrar på det viset i Access... Men jag är inte helt säker...
Test 3:
<code>
public void LaggtillFilm(string imdb,string titel,string regissör)
{
conn1.Open();
laggtillfilm1.Parameters.AddWithValue("?", imdb);
laggtillfilm1.Parameters.AddWithValue("?", titel);
laggtillfilm1.Parameters.AddWithValue("?", regissör);
int antalRowsAffected = laggtillfilm1.ExecuteNonQuery();
conn1.Close();
}
</code>
ExecuteNonQuery returnerar antalet rader som påverkats. Inte ett OdbcCommand
Test 4 vet jag inte. I 3:an la jag till parametrarna, vilket jag inte vet om du redan hade i ditt odbccommand. Framgick inte av texten. Annars ser 4:an rätt ut...Sv:Nybörjarproblem med inläggning av information i en accessdatabas via odbc.
Borde väll ändå vara..
<code>
string insertSQL = "INSERT INTO Film (imdb, titel, regissör) VALUES ( '" + imbd+ "', '" + titel+ "','" + regisör+ "')";
</code>
..eller???
Sen bör ju SQL-injection tas på alvar..
<code>
public static string fixaTecken(string strText)
{
string nText = string.Empty;
nText = strText.Replace("_", "");
nText = strText.Replace("´", "");
nText = strText.Replace("|", "");
nText = strText.Replace("@", "");
nText = strText.Replace("$", "");
nText = strText.Replace("'", "");
return nText;
}
</code>
..vilket skulle betyda följande sql..
<code>
string insertSQL = "INSERT INTO Film (imdb, titel, regissör) VALUES ( '" + fixaTecken(imbd)+ "', '"
+ fixaTecken(titel)+ "','" + fixaTecken(regisör)+ "')";
</code>
Jag har kanske onödigt många tecken som jag kollar, men bättre det än för lite.Sv: Nybörjarproblem med inläggning av information i en accessdatabas via odbc.
nu ska jag ta och fixa uppdatering och borttagningen.
jag använde mig av test 3 - med ändringarna som gjorts.