1

Visual Studio 2008 の C# でアプリケーションを開発しています。SQL Server 2008 データベースに接続しました。

特定のデータを取得するために列をループできるように、列の数を数えたいと思います。

データベースにアクセスして列を把握できますが、プログラムで4〜5個のテーブルを結合しているので、列を数えることができるかどうか知りたいです.

誰でもこれで私を助けることができますか?

シャムさんありがとう

4

6 に答える 6

4
select count(*) from INFORMATION_SCHEMA.columns where TABLE_NAME = 'YourTableName'
于 2013-02-07T14:30:18.993 に答える
1

このようなもの ?

SELECT COUNT(*)
FROM sys.columns c 
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'yourTable'

結果を取得する方法については、TaronProで提供されているこのページを参照してください。

于 2013-02-07T14:27:10.203 に答える
1

SQLConnection オブジェクトを使用して DB に接続している場合は、その GetSchema メソッドを使用して、クエリを実行せずにすべての列のリストを取得します。

    using (SqlConnection connection = new SqlConnection(connectionString))
   {
       // Connect to the database then retrieve the schema information.
       connection.Open();
       DataTable table = connection.GetSchema("Tables");
        ..
        ..
        ..

特定の所有者、テーブル、またはテーブル タイプの列を知りたい場合は、GetSchema メソッド内で制限を使用します。

    string[] restrictions = new string[4];
    restrictions[1] = "dbo";
    DataTable table = connection.GetSchema("Tables", restrictions);

詳細については、このリンクを参照してください。

于 2013-02-07T15:02:49.990 に答える
0

リーダー自体が列数を示します。これは、特定のテーブルまたはビューの行数を知りたくないが、アドホッククエリから知りたい場合に役立ちます。

このように列をダンプできます

string sql = "SELECT * FROM my query";
SqlCommand cmd = new SqlCommand(sql, connection);
using (SqlDataReader reader = cmd.ExecuteReader()) {
    while (reader.Read()) {
        for (int i = 0; i < reader.FieldCount; i++) {
            Console.WriteLine("{0} = {1}",
                              reader.GetName(i),
                              reader.IsDBNull(i) ? "NULL" : reader.GetValue(i));
        }
        Console.WriteLine("---------------");
    }
}
于 2013-02-07T14:44:35.923 に答える
0

同様の状況で私が行ったことは、クエリを実行したときにすべてのデータをDataSetに取得したことです。

DataSetを入手したら、最初のテーブル(ds.Tables [0])を開きました。明らかに、最初に存在を確認します。

あなたがテーブルを持っているとき、それは実行するのと同じくらい簡単です

dt.Columns.Count;

要約すると、DS.Tables [0] .Columns.Count名前で特定の列を検索するには、ループして次の列を検索します。

for (z=0; z < dt.Columns.Count; z++)
{
  // check to see if the column name is the required name passed in.
  if (dt.Columns[z].ColumnName == fieldName)
  {
    // If the column was found then retrieve it 
    //dc = dt.Columns[z];
    // and stop looking the rest of the columns
    requiredColumn = z;
    break;
 }

}

次に、必要なデータを見つけるために、テーブルの行をループして、その列のフィールドを取得します...つまり...

string return = dr.Field<string>(requiredColumn);

Probalbyはそれを行う最良の方法ではありませんが、機能します。明らかに、フィールドに含まれるデータが文字列でない場合は、適切なタイプを渡す必要があります...

dr.Field<decimal>(requiredColumn)
dr.Field<int>(requiredColumn) 

Rgdsジョージ

于 2013-02-07T14:27:54.447 に答える
0

Microsoft.SqlServer.Management.Smo次のように名前空間を使用して、指定したテーブルの列数を取得できます 1 。プロジェクトに Microsoft.SqlServer.Management.Smo dll を追加し、名前空間 Microsoft.SqlServer.Management.Smo 2 を使用します。次のコードを書きます

private int colCount()
{
      Server server=new Server(".\\SQLEXPRESS");
      Database database=Server.Databases["your database name"];
      Table table=database.Tables["your table name"];
      return (table.Columns.Count);
}
于 2013-02-07T14:51:53.833 に答える