La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo definir una clase de operación de base de datos en C# y llamarla?

¿Cómo definir una clase de operación de base de datos en C# y llamarla?

La siguiente es una clase que escribí para operar la base de datos de acceso. Otras bases de datos pueden referirse a la modificación. Espero que ayude.

usando System;

usando System.Collections.Generic;

usando System.Text;

usando System.Data.OleDb;

usando System.Configuration;

usando System.Data;

espacio de nombres AutoEmailSender

{

// /

/// Clase de interacción de base de datos

///

clase pública DB

{

///

/// Obtener conexión a la base de datos

///

/// < devoluciones>

pública estática OleDbConnection GetDBConnection()

{

devuelve nueva OleDbConnection(ConfigurationManager.AppSettings["ConnectString"]);

}

///

/// Conjunto de resultados de la consulta

///

/// Ejecutar declaración

/// Devolver un objeto DataTable

público estático DataTable ExecuteDataTable(string sql)

{

usando (OleDbConnection con = GetDBConnection())

{

OleDbCommand cmd = nuevo OleDbCommand (sql, con);

return ExecuteDataTable(cmd);

}

}

///

/// Conjunto de resultados de la consulta

///

/// comando OleDbCommand para ejecutar la declaración< / param>

/// Devuelve un objeto DataTable

DataTable público estático ExecuteData

Tabla(OleDbCommand cmd)

{

DataSet ds = nuevo DataSet();

usando (OleDbDataAdapter da = nuevo OleDbDataAdapter(cmd))

{

probar

{

da.Fill(ds);

}

capturar (Excepción e)

{

throw e;

}

}

if (ds.Tables .Count > 0)

{

ds.Tables[0].DefaultView.RowStateFilter = DataViewRowState.Unchanged | DataViewRowState.Added | >

devolver ds.Tables[0];

}

else

devolver nulo;

}

///

/// Ejecuta la consulta y devuelve la primera columna de la primera fila en el conjunto de resultados devuelto por la consulta. Ignore otras columnas o filas.

///

/// Declaración de consulta

/// Devuelve el valor del objeto de la primera columna de la primera fila en el conjunto de resultados

objeto estático público ExecuteScalar(string sql)

{

usando ( OleDbConnection con = GetDBConnection())

{

OleDbCommand cmd = new OleDbCommand(sql, con);

return ExecuteScalar(cmd);

}

}

///

/// Ejecuta la consulta y devuelve la primera fila del conjunto de resultados devuelto por la consulta Primera columna. Ignore otras columnas o filas.

///

/// Comando de consulta

/// Devuelve el valor del objeto de la primera columna de la primera fila en el conjunto de resultados

objeto estático público ExecuteScalar(OleDbCommand cmd)

{

intentar

{

cmd.Connection.Open();

objeto obj = cmd.ExecuteScalar();

cmd. Connection.Close ();

return obj;

}

catch (Error de excepción)

{

cmd. Connection.Close();

error de lanzamiento;

}

}

///

/// Actualizar conjunto de datos

///

/// Conjunto de datos a actualizar

/// Insertar instrucción SQL

/// Actualizar instrucción SQL

/// Eliminar instrucción SQL

///

public static int UpdateDataSet(DataTable dt, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)

{

usando (OleDbDataAdapter da = new OleDbDataAdapter())

{

p>

da.InsertCommand = insertCmd;

da.UpdateCommand = updateCmd;

da.DeleteCommand = eliminarCmd;

//da.UpdateBatchSize = 0; //UpdateBatchSize: especifica la cantidad de comandos que se pueden ejecutar en un lote, lo cual no es compatible con Access. 0: Sin límite de tamaño de lote. 1: Desactive las actualizaciones por lotes. >1: los cambios se envían de una sola vez mediante un lote de operaciones UpdateBatchSize.

da.InsertCommand.UpdatedRowSource = UpdateRowSource.None;

da.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;

da.DeleteCommand.UpdatedRowSource = UpdateRowSource.None ;

intentar

{

int fila = da.Update(dt);

devolver fila;

}

capturar (Excepción e)

{

lanzar e;

}

}

}

///

/// Devuelve una estructura de tabla de resultados de ejecución de la declaración de consulta

///

/// Declaración de consulta, SQL complejo no es compatible

/// < / p>

DataTable estática pública GetTableSchema(string sql)

{

sql = sql.ToUpper();

DataTable dt = null;

p>

usando (OleDbConnection con = GetDBConnection())

{

OleDbCommand cmd = new OleDbCommand(sql, con);

con.Open ();

usando (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly | CommandBehavior.CloseConnection))

{

dt = dr .GetSchemaTable();

}

}

return dt;

}

/ // < resumen>

/// Genere automáticamente comandos de inserción, actualización y eliminación basados ​​en la declaración de consulta ingresada

///

/// Declaración de consulta

/// Insertar comando

/// Actualizar comando param>

/// Eliminar comando

public static void GenerateUpdateSQL(string sql, OleDbCommand insertCmd, OleDbCommand updateCmd , OleDbCommand deleteCmd)

{

sql = sql.ToUpper();

DataTable dt = GetTableSchema(sql);

cadena tableName = dt Rows[0]["BaseTableName"].ToString();

List updatePrimarykeys = new List();//Colección de parámetros de clave principal

List deletePrimarykeys = new List();// Los comandos OleDbCommand no pueden hacer referencia al conjunto de parámetros de clave principal al mismo tiempo, así que declare uno más

List insertFields = new List() ;//Colección de parámetros de campo

List updateFields = new List();//Colección de parámetros de campo

columnas de cadena = string.Empty, valores = "" , set = "", donde = "";

foreach (DataRow dr en dt.Rows)

{

if (dr["IsAutoIncrement"] .ToString().Equals("False"))

{

insertFields.Add(new OleDbParameter("@" + dr[ "BaseColumnName"].ToString(),

(OleDbType)dr["ProviderType"],

Convert.ToInt32(dr["ColumnSize"]),

dr["BaseColumnName"].ToString()));

updateFields.Add(new OleDbParameter("@" + dr["BaseColumnName"].ToString(),

(OleDbType)dr["ProviderType"],

Convert.ToInt32(dr["ColumnSize"]),

dr["BaseColumnName"].ToString()));

if (!string.IsNullOrEmpty(columnas) )

columnas += ",";

columnas += dr["BaseColumnName"].ToString();

if (!string.IsNullOrEmpty( valores))

valores += ",";

valores += "@" + dr["BaseColumnName"].ToString();

if (!string.IsNullOrEmpty(set))

establecer += ",";

establecer += dr["BaseColumnName"].ToString() + "= @" + dr ["BaseColumnName"].ToString();

}

if (dr["IsKey"].ToString().Equals("True"))

{

updatePrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString(),

(OleDbType)dr["ProviderType"],

Convert.ToInt32(dr["ColumnSize"]),

ParameterDirection.Input,

Convert.ToBoolean (dr["AllowDBNull"]),

Convert.ToByte(dr["NumericScale"]),

Convert.ToByte(dr["NumericPrecision"]),

dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));

eliminarPrimarykeys.Add(new OleDbParameter("@OLD_" + dr["BaseColumnName"].ToString (),

(OleDbType)dr["ProviderType"],

Convert.ToInt32(dr["ColumnSize"]),

ParameterDirection.Input,

Convert.ToBoolean(dr["AllowDBNull"]),

Convert.ToByte(dr["NumericScale"]),

Convert.ToByte(dr ["NumericPrecision"]),

dr["BaseColumnName"].ToString(), DataRowVersi

on.Original, null));

if (!string.IsNullOrEmpty(where))

donde += " y ";

donde += dr ["BaseColumnName"].ToString() + "=@OLD_" + dr["BaseColumnName"].ToString();

}

}

insertCmd.CommandText = string.Format("insertar en {0} ({1}) valores ({2})", nombre de tabla, columnas, valores);

updateCmd.CommandText = string.Format (" actualizar {0} establecer {1} donde {2}", tableName, establecer, dónde);

eliminarCmd.CommandText = string.Format("eliminar de {0} donde {1}", tableName, donde);

insertCmd.Connection = GetDBConnection();

updateCmd.Connection = GetDBConnection();

deleteCmd.Connection = GetDBConnection();

p>

foreach (OleDbParameter pa en insertFields)

{

insertCmd.Parameters.Add(pa);

}

foreach (OleDbParameter pa en updateFields)

{

updateCmd.Parameters.Add(pa);

}

foreach (OleDbParameter pa en updatePrimarykeys)

{

updateCmd.Parameters.Add(pa);

}

foreach (OleDbParameter pa en eliminarPrimarykeys)

{

eliminarCmd.Parameters.Add(pa);

}

}

}

}