42279


USER_TAB_COLUMNSからカラムの型(CHARやNUMBER等）を取得して、  
その型を基に動的にC#の型に変換する方法はありますでしょうか？

個別に変換マップを作ってCHARならstring型にするという定義を  
持つしかないでしょうか？

最終的には、OracleだけでなくSQLServer等にも対応したいと  
考えております。

このあたり、何かノウハウ等ありましたらご教示ください。


CC BY-SA 3.0
2018-03-09T11:29:12.507
42275
2018-03-09T20:44:02.113
9228
question
c#
C# oracleのデータベースからカラムの型を取得して動的にC#の型に変換できますか？


SQLの型変換に関しては各RDBMS向けのプロバイダーが実装しているため、各製品固有のビューを参照する必要はありません。基本的には単に`DbDataReader`を使って`SELECT`ステートメントを実行すればよいです。

[code]

    var command = connection.CreateCommand();
    command.CommandText = "SELECT * FROM table1";
    using (var reader = command.ExecuteReader())
    {
        for (var i = 0; i < reader.FieldCount; i++)
        {
            var name = reader.GetName(i);
            string sqlType = reader.GetDataTypeName(i);
            Type clrType = reader.GetFieldType(i);
        }
    }
    
[/code]

また`DbDataReader.GetSchemaTable()`を実行すれば空の`DataTable`を返しますので、`Columns[i].DataType`などからテーブルの構造を得ることができます。

なおADO.NETでの標準的な手法は以上のとおりですが、ORM
(データセットデザイナーを含む)を使用している場合はエンティティのプロパティ型を参照してください。


CC BY-SA 3.0
2018-03-09T20:44:02.113
42279
2018-03-09T20:44:02.113
5750
42275
answer