Cześć,
trochę bawię się wersją Compact serwera SQL i przyszło mi do głowy, żeby wykorzystać parametry komendy zamiast wpisywać wszystko do stringa. Mam połączony obiekt connection, wykonuje na nim operacje poprawnie (insert, select). Następnie napisałem takie oto coś:
internal static SqlCeCommand GetCommand()
{
SqlCeCommand cmd = connection.CreateCommand();
cmd.Parameters.Add("@id", SqlDbType.Int);
cmd.Parameters.Add("@start_date", SqlDbType.DateTime);
cmd.Parameters.Add("@end_date", SqlDbType.DateTime);
cmd.Parameters.Add("@done", SqlDbType.Bit);
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 256);
cmd.Parameters.Add("@description", SqlDbType.NVarChar, 4000);
SqlCeParameter param = cmd.Parameters.Add("@parent", SqlDbType.Int);
param.IsNullable = true;
return cmd;
}
// ..... ..... ....
internal void Update()
{
SqlCeCommand cmd = Database.GetCommand();
cmd.CommandText = "UPDATE tasks SET start_data = @start_date, end_date = @end_date, done = @done, name = @name, description = @description " +
"WHERE id = @id";
cmd.Parameters["@start_date"].Value = start_date;
cmd.Parameters["@end_date"].Value = end_date;
cmd.Parameters["@done"].Value = done;
cmd.Parameters["@name"].Value = name;
cmd.Parameters["@description"].Value = description;
cmd.Parameters["@id"].Value = id;
cmd.ExecuteNonQuery();
}
W momencie wykonania ExecuteNonQuery() program wywala mi wyjątek:
System.AccessViolationException was unhandled
Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Source="System.Data.SqlServerCe"
W stack trace na samym końcu jest wywołanie System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan().
Pewnie coś z tymi parametrami namieszałem ale chciałem mieć jedną metodę, która już przygotowuje mi te parametry. Macie jakieś pomysły gdzie dopatrywać się przyczyny?
// edit
problem rozwiązałem, zła nazwa kolumny :| mozg mi sie lansuje od tylu godzin przed komputerem. Ale dziwne, ze taka [CIACH!] robi access violation, imo powinno rzucic jakims SqlCeException.