Hej, Jag gissar att det beror på att du återanvänder samma commandobjekt hela tiden och att parametrarnas värde ligger kvar då. Jag har ingen aning om detta fungerar, men du kan ju testa att lägga till följande först i loopen: Jag skulle gjort på följande sätt: Det är ingen bra lösning att rensa parametrarna. Fungerar detta i C# (net 1.1?)? Jag har haft stora problem med namnsatta parameters i OleDB emot access. Kalla parametrarna vad du vill. Det viktigaste är hur du anropar dem. Parametrar
följande kod:
_con = daoConn.GetConnected();
_con.Open();
_trans = _con.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
_cmd = _con.CreateCommand();
_cmd.Connection = _con;
_cmd.Transaction = _trans;
_cmd.CommandText = " DELETE FROM round WHERE round_id = 1 ";
_cmd.ExecuteNonQuery();
for (int i = 1; i <= noOfHoles; i++)
{
_cmd.CommandText = " INSERT INTO round (round_id, hole_id, player_id, golf_club_id, golf_course_id "
+ " , strokes, score, gir, fw_hit, putts ) "
+ " VALUES (?, ?, ?,?, ?, ?, ?, ?, ?, ? ) ";
_cmd.Parameters.Add("@roundId", roundId);
_cmd.Parameters.Add("@holeId", i);
_cmd.Parameters.Add("@playerId", playerId);
_cmd.Parameters.Add("@clubIb", clubId);
_cmd.Parameters.Add("@courseId", courseId);
_cmd.Parameters.Add("@strokes", (int)_strokes[i]);
_cmd.Parameters.Add("@score", (int)_score[i]);
_cmd.Parameters.Add("@gir", (int)_gir[i]);
_cmd.Parameters.Add("@fwHit", (int)_fwHit[i]);
_cmd.Parameters.Add("@putts", (int)_putts[i]);
_cmd.ExecuteNonQuery();
}
_trans.Commit();
SaveIsOkay = true;
I första loopen ersätts alla parametrar rätt. Men inte i övriga loopar utan där blir värden precis som i första varvet. Varför?
Kör V1 av Framework.
/B
Sv: Parametrar
_cmd.Parameters.Clear();
/JohanSv: Parametrar
_con = daoConn.GetConnected();
_con.Open();
_trans = _con.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
_cmd = _con.CreateCommand();
_cmd.Connection = _con;
_cmd.Transaction = _trans;
_cmd.CommandText = " DELETE FROM round WHERE round_id = 1 ";
_cmd.ExecuteNonQuery();
_cmd.CommandText = " INSERT INTO round (round_id, player_id, golf_club_id, golf_course_id, "
+ " hole_id, strokes, score, gir, fw_hit, putts ) "
+ " VALUES (@roundId, @playerId, @clubId, @courseId, @holeId, @strokes, @score, @gir, @fwHit, @putts ) ";
createParameter( _cmd, "@roundId", OleDbType.Integer, 0, roundId);
createParameter( _cmd, "@playerId", OleDbType.Integer, 0, playerId);
createParameter( _cmd, "@clubId", OleDbType.Integer, 0, clubId);
createParameter( _cmd, "@courseId", OleDbType.Integer, 0, courseId);
OleDbParameter holeId = createParameter( _cmd, "@holeId", OleDbType.Integer, 0);
OleDbParameter strokes = createParameter( _cmd, "@strokes", OleDbType.Integer, 0);
OleDbParameter score = createParameter( _cmd, "@score", OleDbType.Integer, 0);
OleDbParameter gir = createParameter( _cmd, "@gir", OleDbType.Integer, 0);
OleDbParameter fwHit = createParameter( _cmd, "@fwHit", OleDbType.Integer, 0);
OleDbParameter putts = createParameter( _cmd, "@putts", OleDbType.Integer, 0);
_cmd.Prepare();
for (int i = 1; i <= noOfHoles; i++)
{
holeId.Value = i;
strokes.Value = (int)_strokes[i];
score.Value = (int)_score[i];
gir.Value = (int)_gir[i];
fwHit.Value = (int)_fwHit[i];
putts.Value = (int)_putts[i];
_cmd.ExecuteNonQuery();
}
_trans.Commit();
SaveIsOkay = true;
private OleDbParameter createParameter(OleDbCommand cmd, string name, OleDbType type, int size, object Value )
{
OleDbParameter parameter = createParameter(cmd,name,type,size);
parameter.Value = Value;
return parameter;
}
private OleDbParameter createParameter(OleDbCommand cmd, string name, OleDbType type, int size )
{
OleDbParameter parameter = new OleDbParameter(name, type, 0);
cmd.Parameters.Add(parameter);
return parameter;
}
Sv:Parametrar
Skapa parametrarna innan och ändra dom i loopen istället.
Det går snabbare.Sv:Parametrar
/BSv: Parametrar
Har själv kört koden mot en access databas i VS 2003.