19. februar 2004 - 12:50Der er
30 kommentarer og 2 løsninger
SQL-klasse til identificering af table-attributter
Jeg sidder i VB.Net og laver C#-kode der skal lave noget database-interaktion. Det jeg vil er at give navnet på en table og så få attributterne tilbage. Har jeg feks. en table kaldet "ansat" som har attributterne "navn" og CPR-nr", så vil jeg give "ansat" og få "navn,CPR-nr" tilbage - men hvordan - jeg har via MSN ikke kunne finde en klasse der kan hjælpe... What to do?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
tja... så svært er det nu heller ikke... du får jo smidt en helt normal DataTable i hovedet, som er meget nem at arbejde med. DU kunne evt. gennemløbe alle kulonnerne og hente navnene ud på den måde:
DataTable dt = ditabel;
foreach(DataColumn dc in dt.Columns) { Response.Write(dc.ColumnName); }
SqlConnection har af uransagelige årsager ikke en GetSqlSchemaTable.
Mit gæt vil være at det er fordi SqlConnection jo kun er til SQLServer og at man derfor kan bruge de SQLServer specifikke SQL sætninger til at hente den information.
arne_v>> som du selv siger, så kommer det nok af at SqlClient er til direkte opkobling mod en MSSQL-server. Hvis du kigger på eksemplet på GetOleDbSchemaTable i SDK'et tager den nogle paremetre der filtrerer resultatet, og de ligner til forveksling de parametre som SPROC'en i MSSQL tager.
men jo, de kunne da godt have lavet en GetSqlSchemaTable, som egentlig laver det trick med at åbne en reader, execute SPROC'en og returnere readerens SchemaTable
private ArrayList getTableColumns(String tableName) { //Dan dynamisk datastruktur ArrayList, som indeholder column-names ArrayList ALcolumns = new ArrayList();
//Dan DataTable der kan spejle den angivne table DataTable retrTable = new DataTable();
//Lav DataTable-object ud fra modtaget String tableName try { conn.Open(); SqlCommand sqlGetColumn = new SqlCommand(("SELECT * FROM "+tableName), conn); SqlDataReader tempReader = sqlGetColumn.ExecuteReader(); retrTable = tempReader.GetSchemaTable(); conn.Close(); } catch(Exception exp) { MessageBox.Show(exp.ToString()); return null; } catch { MessageBox.Show("Exception cast but not caught!"); return null; }
//Overfør Columns til ArrayList og trim/returner denne foreach(DataColumn dc in retrTable.Columns) { ALcolumns.Add(dc.ColumnName); } ALcolumns.TrimToSize(); return ALcolumns;
Tak for hjælpen Arne - det funker altsammen nu :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.