Bases de Datos - SqlTransaction

 
Vista:

SqlTransaction

Publicado por Diego Alejandro (1 intervención) el 11/11/2010 00:08:09
Hola gente bueno tengo un problema medio complicado.
estoy haciendo una aplicacion win para una cadena de hoteles el asunto es que un hotel puede tener un list de habitaciones. por lo tanto cuando se agrega un hotel se tiener que agregar todas sus habitaciones es decir un list de habitaciones para ello utilizo sqltransaction pero no lo puedo hacer andar el metodo es el siguiente:
El metodo es el suguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
bool _todoOk = false;
_cnn.Open();
SqlTransaction _miTransaccion = _cnn.BeginTransaction();
string consulta = "AgregaHotele";
SqlCommand _AltaHotel = new SqlCommand(consulta, _cnn);//ESTE ES EL COMANDO QUE AGREGA EL HOTEL
_AltaHotel.CommandType = CommandType.StoredProcedure;
SqlParameter orucHotel = new SqlParameter("@ruc", H.Rut);
SqlParameter onombreHotel = new SqlParameter("@nombre", H.Nombre);
SqlParameter ociudadHotel = new SqlParameter("@ciudad", H.Ciudad);
SqlParameter opaisHotel = new SqlParameter("@pais", H.Pais);
SqlParameter odireccionHotel = new SqlParameter("@direccion", H.Direccion);
SqlParameter opiscinaHotel = new SqlParameter("@piscina", H.Piscina);
SqlParameter otelefonoHotel = new SqlParameter("@telefono", H.Telefono);
SqlParameter oretorno = new SqlParameter("@retorno", SqlDbType.Int);
oretorno.Direction = ParameterDirection.ReturnValue;
_AltaHotel.Parameters.Add(orucHotel);
_AltaHotel.Parameters.Add(onombreHotel);
_AltaHotel.Parameters.Add(ociudadHotel);
_AltaHotel.Parameters.Add(opaisHotel);
_AltaHotel.Parameters.Add(odireccionHotel);
_AltaHotel.Parameters.Add(opiscinaHotel);
_AltaHotel.Parameters.Add(otelefonoHotel);
_AltaHotel.Parameters.Add(oretorno);
_AltaHotel.Transaction = _miTransaccion;
 
_AltaHotel.ExecuteNonQuery();
_todoOk = ((int)oretorno.Value == 1);
if (_todoOk == true)
{
	for (int i = 0; i < H.ListaHabiTaciones.Count; i++)//RECORRO CON UN FOR LA LISTA DE HABITACIONES PARA OBTENER CADA HABITACION
	{
		string consulta2 = "AgregaHabitacion";
		SqlCommand _Altahbitacion = new SqlCommand(consulta2, _cnn);//ESTE ES COMANDO PARA AGREGAR LA HABITACION
		_Altahbitacion.CommandType = CommandType.StoredProcedure;
		SqlParameter oruc = new SqlParameter("@rut", H.Rut);
		SqlParameter onro = new SqlParameter("@nro", H.ListaHabiTaciones[i].NumHab);
		SqlParameter opiso = new SqlParameter("@Piso", H.ListaHabiTaciones[i].Piso);
		SqlParameter oId_Tipo = new SqlParameter("@Id_Tipo", H.ListaHabiTaciones[i].TipoHab.NroTipoHabitacion);
		SqlParameter oretorno2 = new SqlParameter("@retorno", SqlDbType.Int);
		oretorno2.Direction = ParameterDirection.ReturnValue;
		_Altahbitacion.Parameters.Add(oruc);
		_Altahbitacion.Parameters.Add(opiso);
		_Altahbitacion.Parameters.Add(oId_Tipo);
		_Altahbitacion.Parameters.Add(onro);
		_Altahbitacion.Parameters.Add(oretorno2);
		_Altahbitacion.Transaction = _miTransaccion;
		_Altahbitacion.ExecuteNonQuery();
		_todoOk = ((int)oretorno2.Value == 1);
	}
 
}
if (_todoOk)
{
	_miTransaccion.Commit();
	return 1;
}
else
{
	_miTransaccion.Rollback();
	return -1;
}

el asunto es que si yo ejecuto esto me dice que esta todo bien pero cuando voy a la base a ver si se ingresaron los registros lo unico que encuentro es el hotel ingresado, las habitaciones ni rastro!
tambien probe ponerle en la linea(SqlParameter oruc = new SqlParameter("@rut", H.Rut);) un rut que ya esta ingresado en la base y anda perfecto!, es como q hace el comit de las habitaciones primero, pero me parece raro porque los procedimintos de la base me tendrian que dar error! y no lo hacen!
Bueno gente si alguno tiene la respuesta le agradeceria muchisimo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder