0
列の値が0より大きい場合は列を更新しようとしています。そうでない場合は、新しい行が挿入されます。C#でUPDATEクエリが更新されません。
UPDATEクエリはAccessで最初にテストされ、正常に動作し、C#で試してみました。
どこから探すかわかりません。どんなヘルプ/ヒント?
Reservation selection = (Reservation)lstbReservations.SelectedItem;
connection.Open();
command.CommandText = @"SELECT Service_Overzicht.OverzichtID, Service.ServiceID, Service.Beschrijving,
IIf(Service_Overzicht.Aantal Is Null,0,Service_Overzicht.Aantal) AS Aantal, Service.Prijs, Service.Categorie
FROM Service LEFT JOIN (SELECT * FROM Service_Overzicht WHERE OverzichtID = [@waarde])
AS OSF ON Service.ServiceID = OSF.ServiceID;";
command.Connection = connection;
command.Parameters.Add(new OleDbParameter("@waarde", OleDbType.Integer));
command.Parameters["@waarde"].Value = selection.Reserveringsnummer;
reader = command.ExecuteReader();
while(reader.Read())
{
if(reader.GetString(2) == "Douche Muntjes")
{
if(reader.GetInt32(3) == 0)
{
command1.CommandText = @"INSERT INTO Service_Overzicht (OverzichtID, ServiceID, Aantal) VALUES (@resID, @sID, @aantal)";
}
else
{
command1.CommandText = @"UPDATE Service_Overzicht
SET Aantal = @aantal
WHERE OverzichtID = @resID AND ServiceID = @sID";
}
command1.Connection = connection;
command1.Parameters.Add(new OleDbParameter("@resID", OleDbType.Integer));
command1.Parameters["@resID"].Value = selection.Reserveringsnummer;
command1.Parameters.Add(new OleDbParameter("@sID", OleDbType.Integer));
command1.Parameters["@sID"].Value = 1;
command1.Parameters.Add(new OleDbParameter("@aantal", OleDbType.Integer));
command1.Parameters["@aantal"].Value = nudShower.Value;
reader1 = command1.ExecuteReader();
if(reader1.HasRows)
{
MessageBox.Show("Something went wrong!");
}
else
{
MessageBox.Show("Services updated");
}
}
エラーなどありますか?問題を明確にしてください。 – lucky
他のUPDATEクエリでもうまく作業していたので、これもうまくいくと思います。また、私はそれのための他の方法を知っていない、これにちょっと新しい:/ –
更新/挿入クエリでExecuteReaderを呼び出すだけでなく、OleDbパラメータではPOSITIONALであるという事実も問題です。クエリに表示される順序に従ってパラメータを挿入する必要があります(INSERTとUPDATEの2つの異なる方法) – Steve