2016-05-02 25 views
0

私はC#System.Data.SqlClient dllを使用してSQLデータベースを照会する必要があります。私は通常、SELECT * FROM TABLE_NAMEのようなSQLクエリ文を使用してデータベースをクエリできます。しかし、テーブル、カラム、またはローの名前はわかりませんので、必要な情報を正しく取得する方法がわかりません。すべてのテーブル名と各テーブルのすべての列名と行名を取得する方法は?

私はSOに見た別の答えの後に、すでに以下のコードを試してみました:

public void PrintNames() // print table, column, and row names 
{ 
    SqlConnection connection = new SqlConnection(connectionString); 
    using (connection) 
    { 
     connection.Open(); 

     DataTable table = connection.GetSchema("Tables"); 
     Debug.Log(table.Columns.Count); 
     Debug.Log(table.Rows.Count); 

     foreach (DataColumn col in table.Columns) 
     { 
      foreach (DataRow row in table.Rows) 
      { 
       Debug.Log(col.ToString() + ", " + row.ToString()); 
      } 
     } 
    } 
} 

これはちょうど、次の印刷に結果:TABLE_CATALOG, System.Data.DataRow何度も繰り返し。

また、Debug.Logというものがなぜ私はUnity3Dを使用しているのだろうと思っていますが、この問題はUnityとは何の関係もないので、タグを追加する必要はありません。

ご協力いただきありがとうございます。

+0

row.ToString()はDataRowとして書き込みます。 row [col.ToString()]のようなセルの値を取得するためにインデックスを作成する必要があります。 – techspider

+0

@techspiderは理にかなっていますが、なぜ 'col.ToString()'が何かを出力しますか? – bpgeck

+0

hmm ....ブレークポイントを設定し、col.ToString()を実行して、書き込みしようとしているプロパティを確認します。あなたはそれが何を理解せずにコードを書いたようです! – techspider

答えて

1

ロー名は何を意味するのかわかりませんが、Information Schema Viewsを使用してデータベースメタデータに関する情報を取得できます。

INFORMATION_SCHEMA.TABLESは、現在のユーザーがアクセス権を持つ現在のデータベースの各テーブルに対して1つの行を返します。

INFORMATION_SCHEMA.COLUMNSは、現在のデータベースの現在のユーザーがアクセスできる列ごとに1つの行を返します。

SELECT TABLE_NAME      //SELECT ONLY THE NAME OF THE TABLE 
FROM INFORMATION_SCHEMA.TABLES   //READ FROM TABLES VIEW 
WHERE TABLE_CATALOG='database name'  //KEEP ONLY VALUES OF YOUR DATABASE 

そしてテーブルのすべての列を取得するには:

SELECT COLUMN_NAME      //SELECT ONLY THE NAME OF THE COLUMN 
FROM INFORMATION_SCHEMA.COLUMNS   //READ FROM COLUMNS VIEW 
WHERE TABLE_CATALOG='database name'  //KEEP ONLY VALUES OF YOUR DATABASE 
    AND TABLE_NAME='table name'   //AND A SPECIFIC TABLE 
+0

ありがとうございます。私は一般的にSQLとデータベースに新しいです。あなたは私の答えを歩いて私を歩いてくれるので、私はそれぞれの行が何をしているのか分かりますか? – bpgeck

+0

@bpgeck:ok、私は自分の答えを更新しています。 –

+0

データベース名は自分で手動で入力した名前ですか? – bpgeck

1

あなたはSQL Serverでシステム・ビューを使用することができます。

SELECT t.name AS TableName, c.Name AS ColumnName 
FROM sys.tables t 
INNER join sys.columns c 
    ON t.object_id = c.object_id 
ORDER BY t.name, c.column_id 

ます場合は、WHERE句に条件を追加することができます結果をさらに絞り込む必要があります。

関連する問題