- PR -

列名取得方法

1
投稿者投稿内容
kost
会議室デビュー日: 2002/01/09
投稿数: 17
投稿日時: 2003-05-12 09:36
いつもお世話になっております、kostです。

ASP.NET(C#)でSqlAdapterを使用してSQLServerに接続しているのですが、列名(フィールド名)のみを取得する方法を探しています。
テーブル名を指定したら、フィールド名を持ってこれるという方法はないでしょうか?(違う方法でもかまいません)
ご存知の方がいらっしゃいましたら、ご教授願います。

kost
近と
会議室デビュー日: 2003/05/12
投稿数: 8
投稿日時: 2003-05-12 10:25
SqlDataReaderのGetNameメソッドで出来ると思います。

以下は、VB.Netでのサンプルソースです。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rd As System.Data.SqlClient.SqlDataReader
Dim i As Integer

SqlConnection1.Open()
rd = SqlDataAdapter1.SelectCommand.ExecuteReader()
For i = 0 To rd.FieldCount() - 1
Debug.WriteLine(i & " : " & rd.GetName(i))
Next
End Sub
kost
会議室デビュー日: 2002/01/09
投稿数: 17
投稿日時: 2003-05-12 11:21
近とさん、早速のご回答ありがとうございます。

この方法は知っていたのですが、SQL文を使わないといけない(勘違いならすいません)ので、他の方法を模索していたのです。

パラメータにテーブル名を指定したら、列名を取得できる都合のいいクラスがないかと...

<参考までにC#ソース(抜粋)>
SqlConnection sqlConn = new SqlConnection();
sqlConn.ConnectionString = strConnection;
sqlConn.Open();
SqlCommand MySelectQuery = new SqlCommand();
MySelectQuery.Connection = sqlConn;
string strMySelectQuery = strSQL; //SQL
MySelectQuery.CommandText = strMySelectQuery;
SqlDataReader MySqlReader = MySelectQuery.ExecuteReader();

int intCnt2=MySqlReader.FieldCount;
for(int i=0;i<intCnt2;i++)
{
strResult[i] = MySqlReader.GetName(i);
}
近と
会議室デビュー日: 2003/05/12
投稿数: 8
投稿日時: 2003-05-12 11:47
そういう事でしたら、System.Data.OleDbネームスペースを使って、
OleDbCommandのCommandTypeプロパティをCommandType.TableDirectにすれば
CommandTextにテーブル名を指定するだけで良いと思います。

Dim cn As New System.Data.OleDb.OleDbConnection()
Dim cm As New System.Data.OleDb.OleDbCommand()
Dim rd As System.Data.OleDb.OleDbDataReader
Dim i As Integer

cn.ConnectionString = strCn
cn.Open()

cm.Connection = cn
cm.CommandType = CommandType.TableDirect
cm.CommandText = strTableName

rd = cm.ExecuteReader

For i = 0 To rd.FieldCount() - 1
Debug.WriteLine(i & " : " & rd.GetName(i))
Next

rd.Close()
rd = Nothing

cm = Nothing

cn.Close()
cn = Nothing
kost
会議室デビュー日: 2002/01/09
投稿数: 17
投稿日時: 2003-05-12 12:51
近とさん、ご回答ありがとうござます。

上手くいきました。
でも、SqlClientには、TableDirect指定はできないのですね...。
OleDbを使用することにします。

<参考までにC#ソース>
OleDbConnection OleDbConn = new OleDbConnection();
OleDbConn.ConnectionString = strConnction;
OleDbConn.Open();
OleDbCommand MySelectQuery = new OleDbCommand();
MySelectQuery.Connection = OleDbConn;
MySelectQuery.CommandType = CommandType.TableDirect;
MySelectQuery.CommandText = strTable; //テーブル名
OleDbDataReader MySqlReader = MySelectQuery.ExecuteReader();
string [] strFieldName = new string[50];
for(int i=0;i<MySqlReader.FieldCount;i++)
{
strFieldName[i] = MySqlReader.GetName(i);
}
return strFieldName;
1

スキルアップ/キャリアアップ(JOB@IT)