2009-07-15 5 views
0

C#/oop noob hier. Ich erstelle eine Datentabelle aus dem Schema einer SQL Server-Datenbank. Ich möchte eine Schaltfläche haben, mit der der Benutzer einige Tabellen aus diesem Schema auswählen und etwas tun kann (z. B. Zeilen einfügen). Die Methode kann jedoch nicht auf die Datentabelle meiner ersten Methode verweisen - wie kann ich die Datentabelle, die in der ersten Methode erstellt wurde, auf eine andere verweisen? HierWie erstellt man eine Datentabelle in einer Methode und referenziert sie in einer anderen?

ist der Code, ich verwende:

public Form1() 
    { 
     /****************************************************************/ 
     string sqlSchema = " SELECT TABLE_CATALOG AS tblname "; 
     sqlSchema += " , TABLE_SCHEMA AS tblschema "; 
     sqlSchema += " , TABLE_NAME AS tblname "; 
     sqlSchema += " , COLUMN_NAME AS colname "; 
     sqlSchema += " , DATA_TYPE AS DATA_TYPE "; 
     sqlSchema += " , CHARACTER_MAXIMUM_LENGTH AS colsize "; 
     sqlSchema += " FROM INFORMATION_SCHEMA.COLUMNS "; 


     InitializeComponent(); 
     OleDbConnection cn = new OleDbConnection(@"Provider=SQLNCLI;Server=THINK\SQLExpress;Database=Northwind;Trusted_Connection=yes;"); 
     OleDbDataAdapter da = new OleDbDataAdapter(sqlSchema, cn); 
     DataTable dt = new DataTable(); 

     da.TableMappings.Add("Table","Schema"); 
     da.Fill(dt); 
     dataGridView1.DataSource = dt; 
    } 
    public void sql_PopulateTable(string tablenm, int rows) 
    { 
     // error on this line: 
     DataTable table1 = da.Tables["Schema"]; 


    } 

Der Fehler Ich erhalte ist ‚da‘ ist nicht im aktuellen Kontext erkannt. Sollte ich meine sqlSchema-Variable als statisch deklarieren? Wie soll ich das syntaktisch machen?

Dank -

+0

Sie diesen Fehler bekommen, weil ‚da‘ im aktuellen Kontext nicht erkannt wird :) –

Antwort

0

Ihre Variablen sind innerhalb des Umfangs der Form1 Konstruktor deklariert - also sobald der Konstruktor verlassen hat, werden die Variablen zerstört.

Sie müssen eine Eigenschaft oder Variable auf Klassenebene erstellen, die Ihre Informationen enthält, damit alle Methoden darauf zugreifen können.

public Form1() 
    { 
     /****************************************************************/ 
     string sqlSchema = " SELECT TABLE_CATALOG AS tblname "; 
     sqlSchema += " , TABLE_SCHEMA AS tblschema "; 
     sqlSchema += " , TABLE_NAME AS tblname "; 
     sqlSchema += " , COLUMN_NAME AS colname "; 
     sqlSchema += " , DATA_TYPE AS DATA_TYPE "; 
     sqlSchema += " , CHARACTER_MAXIMUM_LENGTH AS colsize "; 
     sqlSchema += " FROM INFORMATION_SCHEMA.COLUMNS "; 


     InitializeComponent(); 
     OleDbConnection cn = new OleDbConnection(@"Provider=SQLNCLI;Server=THINK\SQLExpress;Database=Northwind;Trusted_Connection=yes;"); 
     Form1DataAdapter = new OleDbDataAdapter(sqlSchema, cn); 
     DataTable dt = new DataTable(); 

     da.TableMappings.Add("Table","Schema"); 
     da.Fill(dt); 
     dataGridView1.DataSource = dt; 
    } 
    public void sql_PopulateTable(string tablenm, int rows) 
    { 
     // error on this line: 
     DataTable table1 = Form1DataAdapter.Tables["Schema"]; 


    } 

    public OleDbDataAdapter Form1DataAdapter { get; set; } 
+0

Danke, nachdem einige Hantieren mit Datensatz ich glaube, ich auf dem richtigen Weg bin –

0

Warum verwenden Sie nicht GetSchema?

SqlConnection connection = 
    new SqlConnection(connectionString); 
connection.Open(); 
DataTable dt = connection.GetSchema(); 
connection.Close(); 
Verwandte Themen