web-dev-qa-db-ja.com

C#:OracleDbTypeと同等のOracleデータ型


状況:

Oracle.DataAccess.Client(11g)を使用して、ストアドプロシージャを含むOracleデータベースで特定の操作を実行するアプリをC#で作成しています。 Oracleデータ型を含む特定の列挙型(OracleDbType)があることは知っていますが、特定の型にどれを使用するかわかりません。

質問:

  • OracleDbType列挙型の列挙型ごとに、同等のOracle PL/SQLデータ型とは何ですか?

  • 整数には3つのタイプがあります
    (Int16、Int32、Int64)in OracleDbType ...どれを使用するか、またはそれらすべてを知る方法
    働くと思いますか?


20
Partial

OracleDbType Enumerationの値は、ドキュメントで定義されています。 ODP for .NET開発者ガイド をお読みください。

Int16、Int32、Int64のいずれかを選択することに関しては、それらはすべて動作するはずです。 .Net変数の予想サイズに一致するものを選択します。-32768〜32767の値の場合はInt16、-2147483648〜2147483647の値の場合はInt32、それより大きい値の場合はInt64を選択します。 IntおよびPL/SQLデータ型の変換に関連するいくつかの面白いことがあるようです。チェック Mark Williamsによるこのブログ投稿

15
APC

C#の型を最も一般的なOracleDbTypeに変換する方法は次のとおりです

private static OracleDbType GetOracleDbType(object o) 
{
  if (o is string) return OracleDbType.Varchar2;
  if (o is DateTime) return OracleDbType.Date;
  if (o is Int64) return OracleDbType.Int64;
  if (o is Int32) return OracleDbType.Int32;
  if (o is Int16) return OracleDbType.Int16;
  if (o is sbyte) return OracleDbType.Byte;
  if (o is byte) return OracleDbType.Int16;    -- <== unverified
  if (o is decimal) return OracleDbType.Decimal;
  if (o is float) return OracleDbType.Single;
  if (o is double) return OracleDbType.Double;
  if (o is byte[]) return OracleDbType.Blob;

  return OracleDbType.Varchar2;
}

また、文字データの値が非常に大きい場合は、OracleDbType.Clob

23
Charles Bretana

チェック APCのリンク アウト、それらはあなたが探しているものです:マッピングは列挙の名前に従って非常に簡単です。

しかし、気づき始めたように、整数には注意が必要です。これが私のマッピングです:

  • _Int16_:NUMBER(5)
  • _Int32_:NUMBER(10)
  • _Int64_:NUMBER(19)

問題は、NUMBER(38)列で _GetInt64_ を呼び出すと、値が正しい範囲内であっても例外が発生することです...

7
Mac

NUMBER(1,0)=>ブール

NUMBER(5,0)=> Int16.MaxValue == 32767

NUMBER(10,0)=> Int32.MaxValue == 2,147,483,647

NUMBER(19,0)=> Int64.MaxValue == 9,223,372,036,854,775,807

NUMBER(19,0)=> long.MaxValue == 9,223,372,036,854,775,807

1
Carl Prothman

浮動小数点に相当するものを知りたい人のために:

Decimal     Oracle NUMBER type
Double      8-byte FLOAT type

OracleでNumberを使用した場合、10進数が適しています。

APCが指摘したとおり: https://docs.Oracle.com/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm

0
Sterling Diaz