Sie sind auf Seite 1von 16

08/05/12

Como programar en n-Capas con C# (Parte 1)

08/05/12 Como programar en n-Capas con C# (Parte 1) Sitios Asociados: SvMembers V3.0 / SmS Mensajitos

Sitios Asociados: SvMembers V3.0 / SmS Mensajitos PhP V2.22

Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Siempre Ingresar
Siempre
Ingresar

Ingresar con nombre de usuario, contraseña y duración de la sesión

con nombre de usuario, contraseña y duración de la sesión Inicio Forum Ayuda Buscar Tags SvM

Inicio

Forum

Ayuda

Buscar

Tags SvM

Tienda SvM

de la sesión Inicio Forum Ayuda Buscar Tags SvM Tienda SvM Buscar Noticias: ¡SvMembers te presenta
Buscar
Buscar

Noticias:

¡SvMembers te presenta su nueva Tienda SvM! Creado por Staff SvM. ¡Ir al tema oficial!

Downloads

Ingresar

Registrarse

SvMembers | Unidos Somos Red! » Soporte / Informática / Tecnología » Programación » Otros » Como programar en n-Capas con C# (Parte 1)

» Otros » Como programar en n-Capas con C# (Parte 1) Me gusta 76 Páginas: [

Me gusta

76
76

Páginas: [1]

en n-Capas con C# (Parte 1) Me gusta 76 Páginas: [ 1 ] Autor Ir Abajo

Autor

Ir Abajo

Tema: Como programar en n-Capas con C# (Parte 1)

0 Usuarios y 1 Visitante están viendo este tema.

« anterior próximo »

IMPRIMIR

están viendo este tema. « anterior próximo » IMPRIMIR Phreaker Administrator Member Supremo Mensajes: 1836

Phreaker

Administrator

Member Supremo

próximo » IMPRIMIR Phreaker Administrator Member Supremo Mensajes: 1836 99927772Pieza oro Ver Inventario Enviar oro
próximo » IMPRIMIR Phreaker Administrator Member Supremo Mensajes: 1836 99927772Pieza oro Ver Inventario Enviar oro

Mensajes: 1836 99927772Pieza oro Ver Inventario Enviar oro a Phreaker Karma: +20/-0

Mis Objetos
Mis Objetos

La estupides humana no tiene limites

+20/-0 Mis Objetos La estupides humana no tiene limites Como programar en n-Capas con C# (Parte
+20/-0 Mis Objetos La estupides humana no tiene limites Como programar en n-Capas con C# (Parte

Como programar en n-Capas con C# (Parte 1)

« : julio 23, 2010, 05:23:45 pm »

Este es un tema polémico del que se habla mucho y nada, digo que se habla mucho porque al buscar algo de información en Internet, uno se da cuenta, que esta plagado de sitios donde preguntan como aplicar

programación en 3 capas, o N-Capas, responde con algo cierto y concreto, la gordos que tardarías en leer semanas

un proceso largo nada más y casi todos buscamos aprenderlo un poco más

rápido). Este artículo también que me tomará varias noches

comparado con un libro con un lomo de 15 centímetros La primer gran confusión que noto, es que la mayoría no sabe diferenciar entre los conceptos 1. Arquitectura de 3 capas: se basa más bien en como será construido el entorno, una manera de decirlo en romper el clásico concepto Cliente- Servidor para introducir conceptos como Back End (Base de Datos),

pero en muy pocos lugares se mayoría hacen referencia a libros (no estoy en contra de la lectura, es

será bastante largo y me aventuro a decir escribirlo completamente, pero no será nada

a decir escribirlo completamente, pero no será nada Middleware (Servidor de Aplicaciones), Front End (Interfaz

Middleware (Servidor de Aplicaciones), Front End (Interfaz de Usuario). Este es un concepto grande que no veremos ahora, pero lo remarco para hacer entender que no tiene nada que ver con la programación en capas. Se acerca más a un concepto físico. 2. Programación en 3 (n) capas: este es el tema en cuestión y estira más hacia un concepto lógico. En cómo partimos, agrupamos, clasificamos, optimizamos nuestro código. El mismo introduce conceptos como Capa de Acceso a Datos (Esta nos permite conectarnos a la fuente de datos y

08/05/12

Como programar en n-Capas con C# (Parte 1)

operar contra ella), Capa de Negocios (es la que se encarga de procesar

todo,

en la BBDD), y Capa de Presentación (es más bien lo que el usuario percibe, su interfaz gráfica por lo gral). Creo que con esos conceptos introductorios ya estamos preparados para comprender mejor ciertos aspectos de este paradigma. Para resaltar por último, gracias a la separación en capas quiere decir que podemos cambiar de proveedor de base de datos, y no necesitaremos reescribir toda la aplicación de vuelta, sino solamente esa pequeña capa y reutilizaríamos la interfaz y las reglas de negocios, o también podemos mantener las reglas de negocios y el motor de base de datos, y fácilmente cambiarnos de una interfaz WinForm a WebForm, siempre la más dura de cambiar en la de negocios ya que afecta en un nivel mínimo a las otras 2 capas. Creo que ya es suficiente teoría de momento y podemos comenzar con la acción, el código que voy a ir escribiendo lo haré en Visual Studio 2010 por que es la que tengo instalada ahora mismo en la maquina, pero funciona desde la versión 2005 con el framework 2.0 en adelante, ya que ADO.Net no ha sufrido grandes cambios desde esa versión, así que ustedes lo pueden ir creando en la versión del IDE o framework que más gusten. Primeramente vamos a crear una solución con un proyecto de Biblioteca de Clases, el mismo tendrá 3 clases principales para representar la capa de Acceso a Datos, la primera llamaremos GDatos.cs, la misma le asignaremos el namespace AccesoDatos, y una clase abstracta con el mismo nombre. Haremos uso de estos 2 namespace:

validaciones, etc. la misma suele distribuirse en la aplicación en sí y

usingSystem;
1

2 using System.Data;

Lo siguiente que haremos será estructurar en código con regiones para una mayor comodidad en la lectura del mismo, la primer región es la de

Declaración de Variables en la misma creamos las variables o atributos para la conexion a la BBDD, más un objeto de interfaz de conexión para que sea

implementada de manera específica por la clase hija, si se han dado

cuenta

estamos usando ya conceptos de OOP avanzados, y lo seguiremos usando fuertemente en el transcurso del artículo. Esta es una clase que obligatoriamente debe ser hereda por otra. El nivel de acceso por eso están definidas como protected para que sean modificadas por si misma o por sus clases derivadas.

#region"DeclaracióndeVariables"

1

2

3

4

5

6

7

8

9

10

protected string MServidor = "";

protected string MBase = "";

protected string MUsuario = "";

protected string MPassword = "";

protected string MCadenaConexion = ""; protected IDbConnection MConexion;

#endregion

Lo siguiente por hacer es muy sencillo, crear los setters y nuestros atributos anteriormente definidos:

#region"SettersyGetters"

getters de

1

2

3

4

5

6

// Nombre del equipo servidor de datos.

public string Servidor

{

get { return MServidor; }

7

set { MServidor = value; }

8

} // end Servidor

9

10

// Nombre de la base de datos a utilizar.

 

ublic strin

Base

08/05/12

Como programar en n-Capas con C# (Parte 1)

 

p

g

11

12

{

13

get { return MBase; }

// end Base

14

15

}

set { MBase = value; }

16

17

18

19

// Nombre del Usuario de la BD.

public string Usuario

{

20

get { return MUsuario; }

// end Usuario

21

22

}

set { MUsuario = value; }

23

24

25

26

// Password del Usuario de la BD.

public string Password

{

27

get { return MPassword; }

// end Password

28

29

}

set { MPassword = value; }

30

31

32

33

// Cadena de conexión completa a la base.

public abstract string CadenaConexion

{ get; set; }

34

35

#endregion

36

37

#region "Privadas"

38

39

// Crea u obtiene un objeto para conectarse a la base de datos.

{

40

41

protected IDbConnection Conexion

 

get

42

43

{

44

// si aun no tiene asignada la cadena de conexion lo hace

45

if (MConexion == null)

46

MConexion = CrearConexion(CadenaConexion);

47

48

// si no esta abierta aun la conexion, lo abre

49

if (MConexion.State != ConnectionState.Open)

50

MConexion.Open();

51

52

// retorna la conexion en modo interfaz, para que se adapte a cualquier

53

implementacion de los distintos fabricantes de motores de bases de datos

54

return MConexion;

55

} // end get

56

}

// end Conexion

57

#endregion

Creamos ahora los métodos para hacer lecturas a la fuente de datos, hacemos ya en esta clase porque son metodos generales que pueden

que son

muy especificos del driver utilizados, vamos a utilizar el objeto IDataReader

que es una interfaz de implementación general.

lo

implementar tal cual las clases hijas. En el caso de los DataReader

#region"Lecturas"

1

2

3

4

5

// Obtiene un DataSet a partir de un Procedimiento Almacenado.

public DataSet TraerDataSet(string procedimientoAlmacenado)

{

6

7

var mDataSet = new DataSet();

CrearDataAdapter(procedimientoAlmacenado).Fill(mDataSet);

8

return mDataSet;

9

} // end TraerDataset

10

//Obtiene un DataSet a partir de un Procedimiento Almacenado y sus

08/05/12

Como programar en n-Capas con C# (Parte 1)

11

12

13

14

15

parámetros.

public DataSet TraerDataSet(string procedimientoAlmacenado, params

Object[] args)

{

16

17

var mDataSet = new DataSet();

CrearDataAdapter(procedimientoAlmacenado, args).Fill(mDataSet);

// end TraerDataset

18

19

}

return mDataSet;

20

21

22

23

// Obtiene un DataSet a partir de un Query Sql.

public DataSet TraerDataSetSql(string comandoSql)

{

24

var mDataSet = new DataSet();

// end TraerDataSetSql

25

CrearDataAdapterSql(comandoSql).Fill(mDataSet);

26

27

}

return mDataSet;

28

29

30

31

32

// Obtiene un DataTable a partir de un Procedimiento Almacenado.

public DataTable TraerDataTable(string procedimientoAlmacenado)

return TraerDataSet(procedimientoAlmacenado).Tables[0].Copy(); } // end TraerDataTable

{

33

34

35

36

37

38

39

//Obtiene un DataSet a partir de un Procedimiento Almacenado y sus

parámetros.

public DataTable TraerDataTable(string procedimientoAlmacenado,

params Object[] args)

{

args).Tables[0].Copy(); } // end TraerDataTable

return TraerDataSet(procedimientoAlmacenado,

40

41

42

43

44

//Obtiene un DataTable a partir de un Query SQL

public DataTable TraerDataTableSql(string comandoSql)

{

TraerDataTableSql

return TraerDataSetSql(comandoSql).Tables[0].Copy(); } // end

45

// Obtiene un DataReader a partir de un Procedimiento Almacenado.

46

public IDataReader TraerDataReader(string procedimientoAlmacenado)

47

{

48

var com = Comando(procedimientoAlmacenado);

49

return com.ExecuteReader();

50

}

// end TraerDataReader

51

52

// Obtiene un DataReader a partir de un Procedimiento Almacenado y sus

53

parámetros.

54

public IDataReader TraerDataReader(string procedimientoAlmacenado,

55

params object[] args)

56

{

57

var com = Comando(procedimientoAlmacenado);

58

CargarParametros(com, args);

59

return com.ExecuteReader();

60

}

// end TraerDataReader

61

62

// Obtiene un DataReader a partir de un Procedimiento Almacenado.

63

public IDataReader TraerDataReaderSql(string comandoSql)

64

{

65

var com = ComandoSql(comandoSql);

66

return com.ExecuteReader();

67

}

// end TraerDataReaderSql

68

69

// Obtiene un Valor Escalar a partir de un Procedimiento Almacenado. Solo

70

funciona con SP's que tengan

71

// definida variables de tipo output, para funciones escalares mas abajo se

72

declara un metodo

73

public object TraerValorOutput(string procedimientoAlmacenado)

74

{

75

// asignar el string sql al command

08/05/12

Como programar en n-Capas con C# (Parte 1)

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

var com = Comando(procedimientoAlmacenado);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del SP

foreach (IDbDataParameter par in com.Parameters)

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput || par.Direction

== ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

// Obtiene un Valor a partir de un Procedimiento Almacenado, y sus

parámetros.

public object TraerValorOutput(string procedimientoAlmacenado,

params Object[] args)

{

// asignar el string sql al command

var com = Comando(procedimientoAlmacenado);

// cargar los parametros del SP

CargarParametros(com, args);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del SP

foreach (IDbDataParameter par in com.Parameters)

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput || par.Direction

== ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

// Obtiene un Valor Escalar a partir de un Procedimiento Almacenado.

public object TraerValorOutputSql(string comadoSql)

{

// asignar el string sql al command

var com = ComandoSql(comadoSql);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del Query (uso tipico envio de varias sentencias

sql en el mismo command)

foreach (IDbDataParameter par in com.Parameters)

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput || par.Direction

== ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

// Obtiene un Valor de una funcion Escalar a partir de un Procedimiento

Almacenado.

public object TraerValorEscalar(string procedimientoAlmacenado)

{

 

var com = Comando(procedimientoAlmacenado);

return com.ExecuteScalar();

}

// end TraerValorEscalar

08/05/12

Como programar en n-Capas con C# (Parte 1)

/// Obtiene un Valor de una funcion Escalar a partir de un Procedimiento Almacenado, con Params de Entrada public Object TraerValorEscalar(string procedimientoAlmacenado, params object[] args)

{

 

var com = Comando(procedimientoAlmacenado); CargarParametros(com, args); return com.ExecuteScalar();

}

// end TraerValorEscalar

// Obtiene un Valor de una funcion Escalar a partir de un Query SQL public object TraerValorEscalarSql(string comandoSql)

{

 

var com = ComandoSql(comandoSql); return com.ExecuteScalar();

}

// end TraerValorEscalarSql

#endregion

El siguiente bloque es para ejecutar procesos que no devuelven

valores,

al inicio tendremos varios métodos abstractos, para que las clases derivadas estén obligadas a implementarlas a su manera, en un modo especifico, ya que los objetos connection, command, dataadapter, son muy específicos y deben ser implementados por cada una.

#region"Acciones"

1

2

3

4

protected abstract IDbConnection CrearConexion(string cadena);

5

6

7

8

9

protected abstract IDbCommand Comando(string procedimientoAlmacenado);

protected abstract IDbCommand ComandoSql(string comandoSql);

protected abstract IDataAdapter CrearDataAdapter(string

procedimientoAlmacenado, params Object[] args);

protected abstract IDataAdapter CrearDataAdapterSql(string

protected abstract void CargarParametros(IDbCommand comando,

Object[] args);

10

11

12

comandoSql);

13

14

// metodo sobrecargado para autenticarse contra el motor de BBDD

{

if (Conexion.State != ConnectionState.Open)

15

16

17

public bool Autenticar()

18

Conexion.Open();

19

return true;

20

}// end Autenticar

21

22

23

24

// metodo sobrecargado para autenticarse contra el motor de BBDD

public bool Autenticar(string vUsuario, string vPassword)

{

25

MUsuario = vUsuario;

MConexion = CrearConexion(CadenaConexion);

26

27

MPassword = vPassword;

28

29

MConexion.Open();

30

return true;

31

}// end Autenticar

32

33

34

35

36

// cerrar conexion

public void CerrarConexion()

{

37

if (Conexion.State != ConnectionState.Closed)

38

MConexion.Close();

39

}

08/05/12

Como programar en n-Capas con C# (Parte 1)

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

// end CerrarConexion

// Ejecuta un Procedimiento Almacenado en la base.

public int Ejecutar(string procedimientoAlmacenado)

{ return Comando(procedimientoAlmacenado).ExecuteNonQuery(); } //

end Ejecutar

// Ejecuta un query sql public int EjecutarSql(string comandoSql)

{ return ComandoSql(comandoSql).ExecuteNonQuery(); } // end Ejecutar

//Ejecuta un Procedimiento Almacenado en la base, utilizando los parámetros.

public int Ejecutar(string procedimientoAlmacenado, params Object[]

args)

{

var com = Comando(procedimientoAlmacenado);

CargarParametros(com, args);

var resp = com.ExecuteNonQuery();

for (var i = 0; i < com.Parameters.Count; i++)

{

var par = (IDbDataParameter)com.Parameters[i];

if (par.Direction == ParameterDirection.InputOutput || par.Direction

== ParameterDirection.Output) args.SetValue(par.Value, i - 1); }// end for return resp; } // end Ejecutar

#endregion

Ahora bien, no podemos olvidarnos de la sección transaccional, no se utiliza normalmente en todos lados desde la aplicación, pero en procesos dependientes es necesario, así que si necesitamos usarlo, podemos crearlo de este modo:

#region"Transacciones"

1

2

3

4

protected IDbTransaction MTransaccion;

protected bool EnTransaccion;

5

6

7

8

//Comienza una Transacción en la base en uso.

public void IniciarTransaccion()

{

 

try

9

10

{

11

MTransaccion = Conexion.BeginTransaction();

12

13

14

15

16

EnTransaccion = true; }// end try

finally

{

EnTransaccion = false; }

}// end IniciarTransaccion

17

18

19

//Confirma la transacción activa.

{

20

21

public void TerminarTransaccion()

 

try

22

23

24

25

26

MTransaccion.Commit(); }

{

finally

{

MTransaccion = null;

27

EnTransaccion = false;

28

}// end finally }// end TerminarTransaccion

08/05/12

Como programar en n-Capas con C# (Parte 1)

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

//Cancela la transacción activa.

public void AbortarTransaccion()

{

try

{ MTransaccion.Rollback(); }

finally

{

MTransaccion = null;

EnTransaccion = false;

}// end finally

}// end AbortarTransaccion

#endregion

El código completo lo pueden ver aqui:

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

usingSystem;

using System.Data;

namespace AccesoDatos

{

public abstract class GDatos

{

#region "Declaración de Variables"

protected string MServidor = "";

protected string MBase = "";

protected string MUsuario = "";

protected string MPassword = "";

protected string MCadenaConexion = "";

protected IDbConnection MConexion;

#endregion

#region "Setters y Getters"

// Nombre del equipo servidor de datos.

public string Servidor

{

 

get { return MServidor; }

set { MServidor = value; }

}

// end Servidor

// Nombre de la base de datos a utilizar.

public string Base

{

 

get { return MBase; }

set { MBase = value; }

}

// end Base

// Nombre del Usuario de la BD.

public string Usuario

{

 

get { return MUsuario; }

set { MUsuario = value; }

}

// end Usuario

// Password del Usuario de la BD.

public string Password

{

get { return MPassword; }

08/05/12

Como programar en n-Capas con C# (Parte 1)

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

set { MPassword = value; }

} // end Password

// Cadena de conexión completa a la base.

public abstract string CadenaConexion

{ get; set; }

#endregion

#region "Privadas"

// Crea u obtiene un objeto para conectarse a la base de datos.

protected IDbConnection Conexion

{

get

{

// si aun no tiene asignada la cadena de conexion lo hace

if (MConexion == null)

MConexion = CrearConexion(CadenaConexion);

// si no esta abierta aun la conexion, lo abre

if (MConexion.State != ConnectionState.Open)

MConexion.Open();

// retorna la conexion en modo interfaz, para que se adapte a

cualquier implementacion de los distintos fabricantes de motores de bases

de datos

return MConexion;

} // end get

} // end Conexion

#endregion

#region "Lecturas"

// Obtiene un DataSet a partir de un Procedimiento Almacenado.

public DataSet TraerDataSet(string procedimientoAlmacenado)

{

 

var mDataSet = new DataSet();

CrearDataAdapter(procedimientoAlmacenado).Fill(mDataSet);

return mDataSet;

}

// end TraerDataset

//Obtiene un DataSet a partir de un Procedimiento Almacenado y sus

parámetros.

public DataSet TraerDataSet(string procedimientoAlmacenado,

params Object[] args)

{

var mDataSet = new DataSet();

CrearDataAdapter(procedimientoAlmacenado,

args).Fill(mDataSet);

return mDataSet;

} // end TraerDataset

// Obtiene un DataSet a partir de un Query Sql.

public DataSet TraerDataSetSql(string comandoSql)

{

 

var mDataSet = new DataSet();

CrearDataAdapterSql(comandoSql).Fill(mDataSet);

return mDataSet;

}

// end TraerDataSetSql

// Obtiene un DataTable a partir de un Procedimiento Almacenado.

public DataTable TraerDataTable(string procedimientoAlmacenado)

08/05/12

Como programar en n-Capas con C# (Parte 1)

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

{ return

TraerDataSet(procedimientoAlmacenado).Tables[0].Copy(); } // end

TraerDataTable

//Obtiene un DataSet a partir de un Procedimiento Almacenado y sus

parámetros.

public DataTable TraerDataTable(string procedimientoAlmacenado,

params Object[] args)

{ return TraerDataSet(procedimientoAlmacenado,

args).Tables[0].Copy(); } // end TraerDataTable

//Obtiene un DataTable a partir de un Query SQL

public DataTable TraerDataTableSql(string comandoSql)

{ return TraerDataSetSql(comandoSql).Tables[0].Copy(); } // end

TraerDataTableSql

// Obtiene un DataReader a partir de un Procedimiento Almacenado.

public IDataReader TraerDataReader(string

procedimientoAlmacenado)

{

 

var com = Comando(procedimientoAlmacenado);

return com.ExecuteReader();

}

// end TraerDataReader

// Obtiene un DataReader a partir de un Procedimiento Almacenado y

sus parámetros.

public IDataReader TraerDataReader(string

procedimientoAlmacenado, params object[] args)

{

 

var com = Comando(procedimientoAlmacenado);

CargarParametros(com, args);

return com.ExecuteReader();

}

// end TraerDataReader

// Obtiene un DataReader a partir de un Procedimiento Almacenado.

public IDataReader TraerDataReaderSql(string comandoSql)

{

 

var com = ComandoSql(comandoSql);

return com.ExecuteReader();

}

// end TraerDataReaderSql

// Obtiene un Valor Escalar a partir de un Procedimiento Almacenado.

Solo funciona con SP's que tengan

// definida variables de tipo output, para funciones escalares mas abajo

se declara un metodo

public object TraerValorOutput(string procedimientoAlmacenado)

{

// asignar el string sql al command

var com = Comando(procedimientoAlmacenado);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del SP

foreach (IDbDataParameter par in com.Parameters)

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput ||

par.Direction == ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

08/05/12

Como programar en n-Capas con C# (Parte 1)

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

// Obtiene un Valor a partir de un Procedimiento Almacenado, y sus

parámetros.

public object TraerValorOutput(string procedimientoAlmacenado,

params Object[] args)

{

// asignar el string sql al command

var com = Comando(procedimientoAlmacenado);

// cargar los parametros del SP

CargarParametros(com, args);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del SP

foreach (IDbDataParameter par in com.Parameters)

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput ||

par.Direction == ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

// Obtiene un Valor Escalar a partir de un Procedimiento Almacenado.

public object TraerValorOutputSql(string comadoSql)

{

// asignar el string sql al command

var com = ComandoSql(comadoSql);

// ejecutar el command

com.ExecuteNonQuery();

// declarar variable de retorno

Object resp = null;

// recorrer los parametros del Query (uso tipico envio de varias

sentencias sql en el mismo command)

foreach (IDbDataParameter par in com.Parameters)

213

214

215

216

217

218

219

220

221

222

223

224

225

// si tiene parametros de tipo IO/Output retornar ese valor

if (par.Direction == ParameterDirection.InputOutput ||

par.Direction == ParameterDirection.Output)

resp = par.Value;

return resp;

} // end TraerValor

// Obtiene un Valor de una funcion Escalar a partir de un Procedimiento

Almacenado.

public object TraerValorEscalar(string procedimientoAlmacenado)

{

Bienvenido a SvMembers, Has click aqui para registrarte!!

226

return com.ExecuteScalar();

var com = Comando(procedimientoAlmacenado);

227

228

229

230

231

232

233

234

235

236

237

238

239

240

} // end TraerValorEscalar

/// Obtiene un Valor de una funcion Escalar a partir de un

Procedimiento Almacenado, con Params de Entrada

public Object TraerValorEscalar(string procedimientoAlmacenado,

params object[] args)

{

 

var com = Comando(procedimientoAlmacenado);

CargarParametros(com, args);

return com.ExecuteScalar();

}

// end TraerValorEscalar

// Obtiene un Valor de una funcion Escalar a partir de un Query SQL

public object TraerValorEscalarSql(string comandoSql)

08/05/12

Como programar en n-Capas con C# (Parte 1)

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

{

var com = ComandoSql(comandoSql);

return com.ExecuteScalar();

} // end TraerValorEscalarSql

#endregion

#region "Acciones"

protected abstract IDbConnection CrearConexion(string cadena);

protected abstract IDbCommand Comando(string

procedimientoAlmacenado);

protected abstract IDbCommand ComandoSql(string comandoSql);

protected abstract IDataAdapter CrearDataAdapter(string

procedimientoAlmacenado, params Object[] args);

protected abstract IDataAdapter CrearDataAdapterSql(string

comandoSql);

protected abstract void CargarParametros(IDbCommand comando,

Object[] args);

// metodo sobrecargado para autenticarse contra el motor de BBDD

public bool Autenticar()

{

if (Conexion.State != ConnectionState.Open)

Conexion.Open();

return true;

}// end Autenticar

// metodo sobrecargado para autenticarse contra el motor de BBDD

public bool Autenticar(string vUsuario, string vPassword)

{

MUsuario = vUsuario;

MPassword = vPassword;

MConexion = CrearConexion(CadenaConexion);

MConexion.Open();

return true;

}// end Autenticar

// cerrar conexion

public void CerrarConexion()

{

if (Conexion.State != ConnectionState.Closed)

MConexion.Close();

}

// end CerrarConexion

// Ejecuta un Procedimiento Almacenado en la base.

public int Ejecutar(string procedimientoAlmacenado)

{ return Comando(procedimientoAlmacenado).ExecuteNonQuery();

} // end Ejecutar

// Ejecuta un query sql

public int EjecutarSql(string comandoSql)

{ return ComandoSql(comandoSql).ExecuteNonQuery(); } // end

Ejecutar

//Ejecuta un Procedimiento Almacenado en la base, utilizando los

parámetros.

public int Ejecutar(string procedimientoAlmacenado, params

Object[] args)

08/05/12

Como programar en n-Capas con C# (Parte 1)

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

{

var com = Comando(procedimientoAlmacenado);

CargarParametros(com, args);

var resp = com.ExecuteNonQuery();

for (var i = 0; i < com.Parameters.Count; i++)

{

var par = (IDbDataParameter)com.Parameters[i];

if (par.Direction == ParameterDirection.InputOutput ||

par.Direction == ParameterDirection.Output)

args.SetValue(par.Value, i - 1);

}// end for

return resp;

} // end Ejecutar

#endregion

#region "Transacciones"

protected IDbTransaction MTransaccion;

protected bool EnTransaccion;

//Comienza una Transacción en la base en uso.

public void IniciarTransaccion()

{

try

{

MTransaccion = Conexion.BeginTransaction();

EnTransaccion = true;

}// end try finally

{ EnTransaccion = false; }

}// end IniciarTransaccion

//Confirma la transacción activa.

public void TerminarTransaccion()

{

try

{ MTransaccion.Commit()[

TerminarTransaccion () { try { MTransaccion . Commit ()[ En línea AYUDANOS ENVIANDO ESTE TEMA A

En línea

AYUDANOS ENVIANDO ESTE TEMA A LAS REDES SOCIALES:

En línea AYUDANOS ENVIANDO ESTE TEMA A LAS REDES SOCIALES: SvMembers | Unidos Somos Red! SvMembers

SvMembers | Unidos Somos Red!

SvMembers

LAS REDES SOCIALES: SvMembers | Unidos Somos Red! SvMembers Como programar en n-Capas con C# (Parte
LAS REDES SOCIALES: SvMembers | Unidos Somos Red! SvMembers Como programar en n-Capas con C# (Parte

Como programar en n-Capas con C# (Parte 1)

« : julio 23, 2010, 05:23:45 pm »

08/05/12

Como programar en n-Capas con C# (Parte 1)

Nuestros lectores también disfrutaron

Gasta más de $ 4000 Ideas muy 136,000. ​ 00 en animaciones originales para operaciones
Gasta más de $ 4000 Ideas muy 136,000. ​ 00 en animaciones originales para operaciones
Gasta más de $ 4000 Ideas muy 136,000. ​ 00 en animaciones originales para operaciones

Gasta más de $

4000

Ideas muy

136,000.00 en

animaciones

originales para

operaciones para

Flash (botones,

tu perfil de

parecer un

intros, menús,

facebook

personaje de

etc., código

animé

fuente .FLA

incluid

[?]

​ , código animé fuente . ​ FLA incluid [?] Negro Silver Member Mensajes: 252 618Pieza
​ , código animé fuente . ​ FLA incluid [?] Negro Silver Member Mensajes: 252 618Pieza

Negro

Silver Member

fuente . ​ FLA incluid [?] Negro Silver Member Mensajes: 252 618Pieza oro Ver Inventario Enviar

Mensajes: 252 618Pieza oro Ver Inventario Enviar oro a Negro Karma: +0/-0

SvMembers | Unidos Somos Red!

oro a Negro Karma: +0/-0 SvMembers | Unidos Somos Red! Re:Como programar en n-Capas con C#

Re:Como programar en n-Capas con C# (Parte 1)

« Respuesta #1 : enero 25, 2011,

02:29:29 pm »

Pues esta muy bien la info pero en conclucion no hay teoria sino la explicacion basica en un codigo de conexion a la BD pero esta bien la

info

inicialisar

programacion en C Sharp o C#

y

en la declaracion de las variables recordar que se tienen que

ya

que son uno de los pasos mas importantes de la

Gracias por la info!!

uno de los pasos mas importantes de la Gracias por la info!! En línea Su sistema

En línea

Su sistema Operativo es Windows XP y Utiliza Firefox!

Es de sabios preguntar y de tontos el callar

Re:Como programar en n-Capas con C# (Parte 1)Firefox! Es de sabios preguntar y de tontos el callar « Respuesta #1 : enero 25,

« Respuesta #1 : enero 25, 2011, 02:29:29 pm »

Lenguaje de programación Hazlo a través del uso de macros en Excel. Ven, matricú

Microsoft® Office 365 Sus Programas de Office Disponibles Dónde y Cuándo quieras.

Cheap C Strings & Thongs Worldwide free shipping above 30EUR Thongs, C-Strings,

Worldwide free shipping above 30EUR Thongs, C-Strings, grisli Member Superior Mensajes: 157 Re:Como programar en

grisliWorldwide free shipping above 30EUR Thongs, C-Strings, Member Superior Mensajes: 157 Re:Como programar en n-Capas

Member Superior

above 30EUR Thongs, C-Strings, grisli Member Superior Mensajes: 157 Re:Como programar en n-Capas con C# (Parte

Mensajes: 157

Thongs, C-Strings, grisli Member Superior Mensajes: 157 Re:Como programar en n-Capas con C# (Parte 1) «

Re:Como programar en n-Capas con C# (Parte 1)

« Respuesta #2 : enero 26, 2011, 12:42:29 pm »

Cita de: Negro en enero 25, 2011, 02:29:29 pm

Pues esta muy bien la info pero en conclucion no hay teoria sino la explicacion

basica en un codigo de conexion a la BD pero esta bien la

info

y

en la

declaracion de las variables recordar que se tienen que inicialisar

ya

que son

uno de los pasos mas importantes de la programacion en C Sharp o C#

08/05/12

Como programar en n-Capas con C# (Parte 1)

701Pieza oro Ver Inventario Enviar oro a grisli Karma: +1/-0

oro Ver Inventario Enviar oro a grisli Karma: +1/-0 Negro Silver Member Mensajes: 252 618Pieza oro

Negro

Silver Member

Enviar oro a grisli Karma: +1/-0 Negro Silver Member Mensajes: 252 618Pieza oro Ver Inventario Enviar

Mensajes: 252 618Pieza oro Ver Inventario Enviar oro a Negro Karma: +0/-0

oro Ver Inventario Enviar oro a Negro Karma: +0/-0 Phreaker Administrator Member Supremo Gracias por la

Phreaker

Administrator