🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB.NET

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

Q&A

解決済

2回答

16044閲覧

DatatableをString配列に格納したい

tomo2480

総合スコア5

VB.NET

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

0グッド

0クリップ

投稿2021/01/21 23:14

編集2021/01/22 00:19

マスターデータをセレクトし、STAFCODEをdistinctしたdatatableを作成、
そのdatatableをstring配列に変換したいのですが、


ミニマムコードになります。

Dim sSQL as string = "SELECT * FROM STAFFMASTER" Cmd1.CommandText = sSQL DataAdapter1.Fill(Ds1, TBL) Dim DistDT As DataTable = Ds1.Tables(TBL).DefaultView.ToTable(True, "STAFCODE") Dim Arr_string As String() = DistDT.Rows.Cast(Of DataRow).Select(Function(row) row("STAFCODE")).ToArray()

↑ここで
「Option Strict On では 'Object()' から 'String()' への暗黙的な変換は許可されていません。」

↓なので、CType()でくくってやってみても・・

Dim arr_string As String() = CType(DistDT.Rows.Cast(Of DataRow).Select(Function(row) row("STAFCODE")).ToArray(), String())

「'System.Object[]' のオブジェクトを型 'System.String[]' にキャストできません」
となってしまいます。
DatarowのはずなのになんでObject型になっちゃうのやら。。

解決法をご存じの方、ご教示いただけませんでしょうか。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/01/21 23:27

コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。
退会済みユーザー

退会済みユーザー

2021/01/21 23:29

> datatableをstring配列に変換したい CSV にする方法ならググれば参考になる記事が多々ヒットしますのでそれを見ましょう。
tomo2480

2021/01/21 23:45

返信ありがとうございます。 >コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。 了解しました。次回からそのようにいたします。 String配列に格納してその配列をそのまま次の処理につなげたいのでcsvではないのです。
tomo2480

2021/01/22 00:01

ループで回してstring配列にするのはもちろん問題ないのですが、ループで処理ではなく 一括変換できないかというところです。
退会済みユーザー

退会済みユーザー

2021/01/22 00:12 編集

> 了解しました。次回からそのようにいたします。 質問は編集できますのでこの質問からお願いします。インデントされてないコードは質問者さん自身も読む気がしないのでは? 赤の他人の閲覧者・回答者はなおさらです(なので私はまだ読んでません)。読んでもらえないと話が始まらないのですから、読んでもらえる努力をしましょう。
tomo2480

2021/01/22 00:19

編集できたのですね。すみません。 コードの挿入で修正しました。よろしくお願いします。
退会済みユーザー

退会済みユーザー

2021/01/22 00:50

DataTable の各列の型はどうなっているのでしょう? arr_string には DataTable の内容をどういう形で格納したいのですか? 「その配列をそのまま次の処理につなげたい」とのことなので、その処理に必要な形にすると思いますが、それはどういうものかという質問です。
tomo2480

2021/01/22 01:33

Datatable「DistDT」のカラム「STAFCODE」はDatatype:system.String となっています。 >arr_string には DataTable の内容をどういう形で格納したいのですか? String型の配列に格納したいです。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2021/01/22 01:36

> Datatable「DistDT」のカラム「STAFCODE」はDatatype:system.String となっています。 全ての列のことを聞いてます。 > String型の配列に格納したいです。 それは私に期待した答えになってないのですが、とにかく回答にそのあたりも書きましたので見てください。
guest

回答2

0

row("STAFCODE") は Object なので、ToString() すれば良いのでは?

VB

1Dim DistDT As New DataTable 2DistDT.Columns.Add("STAFCODE", GetType(String)) 3DistDT.Rows.Add("001") 4DistDT.Rows.Add("002") 5Dim arr_string As String() = CType(DistDT.Rows.Cast(Of DataRow).Select(Function(row) row("STAFCODE").ToString()).ToArray(), String())

投稿2021/01/22 01:34

KOZ6.0

総合スコア2707

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

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

tomo2480

2021/01/22 01:50

回答頂きましてありがとうございます。 まだ解決には至っておりせんが頂いた回答を参考にもう少し考えてみます。
guest

0

ベストアンサー

以下の質問への私のコメントに対する返事がありませんが、

DataTable の各列の型はどうなっているのでしょう?

arr_string には DataTable の内容をどういう形で格納したいのですか? 「その配列をそのまま次の処理につなげたい」とのことなので、その処理に必要な形にすると思いますが、それはどういうものかという質問です。

型については string 型以外は ToString() で string 型に変換した後、各フィールドの文字列を一行に連結した文字列をレコードの行数だけ arr_string に格納したいのだろうと想像して、レスします。

以下のようにいしてはいかがですか?

例えば以下のような SQL Server DB のテーブル(Microsoft のサンプルデータベースの Products テーブルです)から DataTable に取得したデータを string の配列に格納するには、

イメージ説明

以下のようにすればできます。何もせず連結すると各フィールドの区切りが分かりずらいのでカンマで区切ってますが、そこは質問者さんの事情に合わせて適宜対応してください。

イメージ説明

投稿2021/01/22 01:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tomo2480

2021/01/22 01:48

細かく回答頂きましてありがとうございます。 まだ解決には至っておりせんが頂いた回答を参考にもう少し考えてみます。
退会済みユーザー

退会済みユーザー

2021/01/22 01:58 編集

KOZ6.0 さんの回答を見て思ったのですが、質問者さんのやりたいことを誤解していたかもしれません。 全レコード、全フィールドのデータを読み込んだ DataTable が既に存在していて、それから STAFCODE 列のデータだけを DISTINCT した形で取り出して、string 型の配列にしたいということだったのでしょうか?
tomo2480

2021/01/22 02:13

また返信頂きまして申し訳ございません。 そうですね。DBのテーブルからDatatable作成し、さらにそこからSTAFCODE列だけをDISTINCTしたDatatableを作成して、それをString型配列に変換したい、という内容でした。 String型になっているはずなのにおかしいなと。 頂いた回答が更に深い内容でしたので本当にありがとうごいました。もう少し考えてみます。
退会済みユーザー

退会済みユーザー

2021/01/22 02:16

誤解していたようですみません。そういう話であれば、私のコードで書いた中間に匿名クラスをはさむ必要はないので、もっと簡単にできます。「もう少し考えてみます」とのことですので、その方向での自己解決に期待してます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問