Visual Studio 2008 の C# でアプリケーションを開発しています。SQL Server 2008 データベースに接続しました。
特定のデータを取得するために列をループできるように、列の数を数えたいと思います。
データベースにアクセスして列を把握できますが、プログラムで4〜5個のテーブルを結合しているので、列を数えることができるかどうか知りたいです.
誰でもこれで私を助けることができますか?
シャムさんありがとう
Visual Studio 2008 の C# でアプリケーションを開発しています。SQL Server 2008 データベースに接続しました。
特定のデータを取得するために列をループできるように、列の数を数えたいと思います。
データベースにアクセスして列を把握できますが、プログラムで4〜5個のテーブルを結合しているので、列を数えることができるかどうか知りたいです.
誰でもこれで私を助けることができますか?
シャムさんありがとう
select count(*) from INFORMATION_SCHEMA.columns where TABLE_NAME = 'YourTableName'
このようなもの ?
SELECT COUNT(*)
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'yourTable'
結果を取得する方法については、TaronProで提供されているこのページを参照してください。
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);
詳細については、このリンクを参照してください。
リーダー自体が列数を示します。これは、特定のテーブルまたはビューの行数を知りたくないが、アドホッククエリから知りたい場合に役立ちます。
このように列をダンプできます
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("---------------");
}
}
同様の状況で私が行ったことは、クエリを実行したときにすべてのデータを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ジョージ
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);
}