Resulta que tengo un TreeView que me muestra todas las bases de datos que hay con sus respectivas tablas. El problema como verán es que me aparecen tablas a las que le pertenecen a una base de datos pero que tambien les aparecen en otras, lo cual está mal.
Y lo que quiero es que me muestren nomas las tablas a las que les pertenecen la base de datos únicamente.
TreeNode node; TreeNode hijo; private void Form1_Load(object sender, EventArgs e) { DataTable tabla = new DataTable(); DataTable tablas = new DataTable(); ReglasDeNegocios.OperacionesBD operaciones = new ReglasDeNegocios.OperacionesBD(); if (operaciones.BaseDatos(sUsuario, sPassword, ref tabla)) { foreach (DataRow dr in tabla.Rows) { node = new TreeNode(dr["name"].ToString()); string hijos = Convert.ToString(dr["name"].ToString()); if (operaciones.BaseDatos(sUsuario, sPassword, hijos, ref tablas)) { foreach (DataRow dr2 in tablas.Rows) { hijo = new TreeNode(dr2["Tabla"].ToString()); node.Nodes.Add(hijo); } treeView1.Nodes.Add(node); } } } else { MessageBox.Show("Ocurrio un error: " + operaciones.sLastError); } }
Asi mando a llamar la BaseDatos:
public Boolean BaseDatos(String sUsuario, String sPassword, String BD, ref DataTable Tabla) { Boolean bAllOk = false; using (SqlConnection conexion = new SqlConnection()) { try { conexion.ConnectionString = $ "Server=ROBERTODIAZ; User Id={sUsuario}; Password={sPassword}"; conexion.Open(); SqlCommand comando = new SqlCommand($ "use {BD} select sc.name+'.'+tb.name AS Tabla from sys.tables tb inner join sys.schemas sc on tb.schema_id = sc.schema_id order by Tabla ASC", conexion); SqlDataAdapter adapter = new SqlDataAdapter(comando); adapter.Fill(Tabla); bAllOk = true; } catch (Exception ex) { sLastError = ex.Message; } finally { conexion.Close(); } } return bAllOk; }
¿Como solucionarían esto?