Aktualizacja jednego pola w bazie danych Oracle

0

Mam tabele zlecenia, w której jest kilkanaście kolumn. Chcę zaktualizować jedno konkretne pole. Nie dostaję żadnych błędów, ale pole status nie zmienia swojej wartości w bazie danych.

 
        public void UpdateState(Status state)
        {
            using (OracleConnection cnn = new OracleConnection(connectionString))
            using (OracleCommand cmd = new OracleCommand("UPDATE ZLECENIA SET STATUS=:NewState WHERE IDZLECENIA=:ID", cnn))
            {
                cmd.Parameters.Add(":ID", state.Id);
                cmd.Parameters.Add(":NewState", state.State);
                cnn.Open();
                cmd.ExecuteNonQuery();
            }
        }
0

zobacz pod debuggerem co masz pod state.Id bo podejrzewam, że tu jest problem

1

Może się wywala tylko o tym nawet nie wiesz. ;)

public void UpdateState(Status state)
{
	using (OracleConnection cnn = new OracleConnection(connectionString))
	using (OracleCommand cmd = new OracleCommand("UPDATE ZLECENIA SET STATUS=:NewState WHERE IDZLECENIA=:ID", cnn))
	{
		try
		{
			cmd.Parameters.Add(":ID", state.Id);
			cmd.Parameters.Add(":NewState", state.State);
			cnn.Open();
			cmd.ExecuteNonQuery();
		}
		catch (Exception ex)
		{
			Debug.WriteLine(ex.Message);
		}
	}
}
0

@DibbyDum teraz przynajmniej wiem jaki błąd dostaję.

        public void UpdateState(Status state)
        {
            using (OracleConnection cnn = new OracleConnection(connectionString))
            using (OracleCommand cmd = new OracleCommand("UPDATE ZLECENIA SET STATUS=:NewState WHERE IDZLECENIA=:ID", cnn))
            {
                try
                {
                    MessageBox.Show(state.Id.ToString()); //daje liczbę i jest zlecenie o tym id
                    MessageBox.Show(state.State); //daje tekst
                    cmd.Parameters.Add(":ID", state.Id);
                    cmd.Parameters.Add(":NewState", state.State);
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("test: " + ex);
                    Debug.WriteLine(ex.Message);
                }
            }
        }

http://www.techonthenet.com/oracle/errors/ora01722.php
http://stackoverflow.com/questions/12549029/sql-error-ora-01722-invalid-number

sql error “ORA-01722: invalid number”
Tylko, że ja nigdzie nie konwertuje stringa na liczbę. Pole id jest typu Number(38,0). Status Varchar2. W C# mam id jako decimal, status jako string.

1

Winą pewnie jest separator. Ale jak najłatwiej się upewnić postaw break point w tym miejscu cmd.ExecuteNonQuery(); jak rozwiniesz właściwości znajdziesz tam CommandText będzie to twoje sklejone zapytanie odpal je samo na bazie.

Ja obstawiam zamiast np: Id = "12.00" będzie "12,00".

Swoją drogą czemu id jest typu decimal a nie int?

EDIT:

Możesz też zrobić coś takiego nie wiem czy pomoże:

param.ParamName = "@Pole";
param.ParamValue = state.Id;
param.ParamDBType = SqlDbType.Decimal;
parameters.Add(param);

1 użytkowników online, w tym zalogowanych: 0, gości: 1