質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

16184閲覧

.net DataTable 列のタイプ指定

xo001122

総合スコア13

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/04/29 04:36

お世話になっております。

現在.netでプログラムを作成しているのですが、作成したDataTableに列を追加した際に、どうも指定した型の列を追加してくれなくて困っています。

ソースは以下の通りです。(一部抜粋)

VB.NET

1dim test_Table As DataTable 2 3test_Table = New DataTable() 4test_Table.Columns.Add("JIKAN", Type.GetType("System.DateTime"))

Visual Studio2015で開発を行っており、
ウォッチで「test_Table.Rows(0).Item("JIKAN").GetType」で追ってみると、
値:{Name = "String" FullName = "System.String"}
となっています。これって「DateTime」を指定しているはずなのに、「String」で列を作ってしまっていますよね。

原因が分からずに困っています。
助言をくださると有難いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/05/03 05:16

問題がない部分をいくら見てもわかりません。作られたばかりの時は DateTime になっているはずなので、いつ変わるのかデバッグしてみてください。こちらにはソースがありません。
xo001122

2017/06/01 16:52

ご指摘ありがとうございます。ソースを追いかけ切れていませんでした。デバックをしっかりを行ったとろこ、別のDatatableを突っ込んでしまっている箇所がありました。それで型が変わっていたようです。"いつ変わるのか”というお言葉ではっとしました。仰る通り、問題ない部分を見ていても解決できないですね。この度は本当にありがとうございました。
guest

回答3

0

VB

1test_Table.Columns.Add("JIKAN", Type.GetType("System.DateTime"))

この部分が間違っています。次のようにしてください。

VB

1test_Table.Columns.Add("JIKAN", GetType(System.DateTime))

前者の GetType は Type の静的メソッドで、型を知りたいオブジェクトを引数にします。この場合は "System.DateTime" という文字列が渡されているので、戻り値は String になります。
後者の GetType は演算子で、C# で言うところの typeof にあたります。

投稿2017/05/09 08:18

編集2017/05/09 08:19
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

SurferOnWwwさんのコードも加えて

VB.NET

1Dim test_Table As DataTable 2 3test_Table = New DataTable() 4test_Table.Columns.Add("JIKAN", Type.GetType("System.DateTime")) 5 6test_Table.Rows.Add("2017/04/29 12:00:00") 7 8Console.WriteLine("JIKAN: {0}", test_Table.Columns("JIKAN").DataType.Name)

上記を試しましたが、出力はDateTimeでしたし、
ウォッチで「test_Table.Rows(0).Item("JIKAN").GetType」を見てもDateTimeでした。

提示されたコードでは現象が発生しません。
提示されていない部分のコードでtest_Tableに別のDataTableを代入してしまっているとか
他の場所で同じ名前で作成したものを勘違いして見ているとかないでしょうか?

投稿2017/04/29 12:55

YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xo001122

2017/06/01 16:45

返信がとても遅くなってしまい申し訳ありません。ソースを追ってみると、別のDataTableを突っ込んでしまっているところがありました。理解の浅いコードにいろいろと手を加えるのは危険ですね・・・反省しました。本当にありがとうございました。
guest

0

これって「DateTime」を指定しているはずなのに、「String」で列を作ってしまっていますよね。

そんなことはないはずと思って念のため試してみましたが、やはりそんなことはなかったですが?

DataTable table = new DataTable(); table.Columns.Add(new DataColumn("id", typeof(int))); table.Columns.Add(new DataColumn("name", typeof(string))); table.Columns.Add(new DataColumn("date", typeof(DateTime))); Console.WriteLine("id: {0}", table.Columns["id"].DataType.Name); Console.WriteLine("name: {0}", table.Columns["name"].DataType.Name); Console.WriteLine("date: {0}", table.Columns["date"].DataType.Name); /* 結果は: id: Int32 name: String date: DateTime */

試したのは C# でですが、上記の辺りは VB.NET も同じかと。

投稿2017/04/29 05:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xo001122

2017/04/29 05:27

そうなんですよ、そんなことないはずなんですよね(笑) 以前にも同じ様にしてDataTable作成したのですが、そちらはうまくいってました。 なにかコード以外の場所で設定(?)が必要なのか?と思いまして...。 ちなみにDataTimeだけではなくInt16を指定した列もあるのですが、それもやはりStringになっていました。とても不思議です。指定した型を無視し全列Stringで作成されてしまうのです。
退会済みユーザー

退会済みユーザー

2017/04/29 05:58

私の回答と同じコードを試してみたらどうなりますか?
退会済みユーザー

退会済みユーザー

2017/04/29 06:01

VB.NET で試したいなら変換サービスがあります。Telerik Code Converter: http://converter.telerik.com/
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問