Cómo obtener metadatos de una base de datos SQLite usando código C#
Para obtener los datos del objeto de la base de datos de Sqlite, hice un ejemplo de prueba para obtener su información. De hecho, sus metadatos todavía están muy cerca del método de operación de Access. Primero, creamos algunas tablas abriéndolas en la herramienta de administración de bases de datos de Sqlite o Visual Studio, como se muestra a continuación.
Primero, echemos un vistazo a la interfaz para obtener objetos de la base de datos a través del código C#, como se muestra a continuación.
El efecto de interfaz para obtener metadatos de la tabla se muestra en la siguiente figura. No hay nada que verificar entre la vista y esto. Lo interesante es que se muestra al crear el script, jaja.
Obtenga información del campo de la tabla como se muestra en la siguiente figura.
Con estos datos, puedo implementar muy fácilmente operaciones de generación de código en mi herramienta de generación de código Database2Sharp.
Ahora echemos un vistazo a cómo la implementación detrás del código anterior entiende la base de datos Sqlite para operaciones de metadatos.
cadena conexiónCadena = "";
form1 público()
{
InitializeComponent();
connectString = string.Format(@" Data Source={0}/OrderWater.db;Version=3;",Application.StartupPath);
}
vacío privado btnGetSchema_Click(objeto remitente, EventArgs e)
{
usando (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open( );
DataTable esquemaTable = conn.GetSchema("TABLES");
this.dataGridView1.DataSource = esquemaTable;
}
}
El código de operación para obtener los campos de la tabla es como se muestra en la figura.
vacío privado btnGetColumns_Click(remitente del objeto, EventArgs e)
{
usando (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
tabla DataTable = conn.GetSchema("TABLAS");
if (tabla! = nulo && tabla.Rows .Count > 0)
{
string tableName = table.Rows[0]["TABLE_NAME"].ToString()
DataTable esquemaTable = GetReaderSchema; (tableName, conn);
this.dataGridView1.DataSource = esquemaTable;
}
}
}
DataTable privado GetReaderSchema(cadena nombreTabla, conexión SQLiteConnection)
{
DataTable esquemaTable = null;
IDbCommand cmd = new SQLiteCommand();
cmd.CommandText = string.Format("select * from [{0}]", tableName
cmd.Connection = conexión;
usando (lector IDataReader); = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly))
{
esquemaTable = lector.GetSchemaTable()GetSchemaTable();
} p>
return esquemaTable;
}
Para lograr el enlace con la información del campo de la base de datos en mi herramienta de generación de código, es necesario obtener las propiedades del objeto ColumnInfo correspondiente Establezca las propiedades de Sqlite como se muestra a continuación.
Uso (SQLiteConnection conn = new SQLiteConnection(ConnectString))
{
conn.Open()
DataTable esquemaTable = GetReaderSchema; (tableName, conn);
foreach (DataRow dr en esquemaTable.Rows)
Filas de atributos del objeto Sqlite)
{
ColumnInfo info = new ColumnInfo();
info.Name = new NameElement(dr["ColumnName"].ToString());
info.Ordinal = Convert.ToString() ;
info.NameElement(dr["ColumnName"].ToString())Ordinal = Convert.ToInt32(dr["ColumnOrdinal"].ToString());
info. AllowDBNull = (bool)dr["AllowDBNull"];
info.MaxLength = Convert.ToInt32(dr["ColumnSize"].
info.DataTypeId = Convert.ToInt32(dr ["ProviderType"].ToString());
info.DataType = dr["DataTypeName"].ToString().Trim();
info.DataTypeId = Convertir. ToInt32(dr["ProviderType"].ToString());