2009-07-15 5 views
0

C#/oop noob ici. Je crée une datatable à partir du schéma d'une base de données SQL Server. Je veux avoir un bouton qui permet à l'utilisateur de choisir des tables de ce schéma et de faire quelque chose (insérer des lignes par exemple). Cependant, la méthode est incapable de référencer le datatable de ma première méthode - comment puis-je référencer la datatable faite dans la première méthode d'une autre?Comment créer une datatable dans une méthode et la référencer dans une autre?

Voici le code que je utilise:

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"]; 


    } 

L'erreur que je reçois est « da » est pas reconnu dans le contexte actuel. Dois-je déclarer ma variable sqlSchema comme statique? Comment dois-je faire cela de manière syntaxique?

Merci -

+0

vous obtenez cette erreur parce que « da » est pas reconnu dans le contexte actuel :) Merci –

Répondre

0

Vos variables sont déclarées dans la portée du constructeur Form1 - donc une fois que le constructeur a quitté, les variables sont détruites.

Vous devez créer une propriété ou une variable de niveau classe pour contenir vos informations afin que toutes les méthodes puissent y accéder.

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

, après quelques bidouiller des jeux de données, je pense que je suis sur la bonne voie –

0

Pourquoi n'utilisez-vous pas GetSchema?

SqlConnection connection = 
    new SqlConnection(connectionString); 
connection.Open(); 
DataTable dt = connection.GetSchema(); 
connection.Close(); 
Questions connexes