¿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"]); p>
}
///
/// Conjunto de resultados de la consulta
///
/// Ejecutar declaración
///
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>
///
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
///
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
///
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 param>
/// Insertar instrucción SQL
/// Actualizar instrucción SQL param>
/// 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;
}
} p>
}
///
/// Devuelve una estructura de tabla de resultados de ejecución de la declaración de consulta
/// resumen>
/// Declaración de consulta, SQL complejo no es compatible
///
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
List
List
List
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);
} p>
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);
}
}
} p>
}