0

検索したところ、驚くほど少ない結果しか見つかりませんでした。DataColums のデータ型プロパティがあることがわかりましたが、SQL サーバー データベースからデータを取得する場合、取得されるデータ型は何ですか? 私はSqlDataAdapterを埋めるために を使っていDataTableます。値を取得するには、次のようにします。

DataTable dtt = Database.get(SQLString); //pseudo-code
string value = dtt.Rows[0][0]; //Or is this a string?

ではdtt.Rows[0][0]、データベースの列のデータ型が bigint、int、date、または bit の場合はどうなるでしょうか? 最初にそれらを文字列に変換してから、必要な他のデータ型に変換する必要がありますか?

4

2 に答える 2

2

それはデータベースでどのように定義されているかによって異なります。たとえば、次のテーブルがあるとします。

CREATE TABLE [dbo].[Test](
    [ID] [int] NOT NULL,
    [Name] [nvarchar](128) NOT NULL,
    [Birthday] [datetime]) 

次に、そのように最初の行にアクセスできます:

DataTable dtt = Database.get("Select * from Test"); //pseudo-code
DataRow rw = dtt.Rows[0];
int id = rw.Field<int>("ID");
string name = rw.Field<string>("Name");
DateTime dt = rw.Field<DateTime>("Birthday");

また

DataTable dtt = Database.get("Select * from Test"); //pseudo-code
int id = (int) dtt[0]["ID"];
string name = (string) dtt[0]["Name"];
DateTime dt = (DateTime) dtt[0]["Birthday")];
于 2012-04-28T12:03:19.297 に答える
2

ではdtt.Rows[0][0]、データベースの列のデータ型がbigintintdateまたはの場合はどうなるbitでしょうか?

それぞれboxed Int64、 boxed Int32DateTimeboxed 、 boxed BooleanObjectこれが、適切な型の値を返すことができるように、この式の戻り値の型が - である理由です。あなたがする必要があるのは(どのタイプが返されるべきかを知っている)キャスト/アンボックスを挿入することだけです-それらをすべてObjectsとして扱い続けたい場合を除きます。

そして、私はアントニオのコメントに同意します-序数ではなく名前で列にアクセスすることが望ましいでしょうstring-sではなくintsを受け入れるオーバーロードされた演算子を使用するか、少なくともIndexOf()列の序数を検索するために使用できます実行時に。

于 2012-04-28T11:39:18.373 に答える