マスターデータをセレクトし、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型になっちゃうのやら。。
解決法をご存じの方、ご教示いただけませんでしょうか。
コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。
> datatableをstring配列に変換したい
CSV にする方法ならググれば参考になる記事が多々ヒットしますのでそれを見ましょう。
返信ありがとうございます。
>コードは ``` と ``` で囲ってください。インデントされて見やすくなるので。
了解しました。次回からそのようにいたします。
String配列に格納してその配列をそのまま次の処理につなげたいのでcsvではないのです。
ループで回してstring配列にするのはもちろん問題ないのですが、ループで処理ではなく
一括変換できないかというところです。
> 了解しました。次回からそのようにいたします。
質問は編集できますのでこの質問からお願いします。インデントされてないコードは質問者さん自身も読む気がしないのでは? 赤の他人の閲覧者・回答者はなおさらです(なので私はまだ読んでません)。読んでもらえないと話が始まらないのですから、読んでもらえる努力をしましょう。
編集できたのですね。すみません。
コードの挿入で修正しました。よろしくお願いします。
DataTable の各列の型はどうなっているのでしょう?
arr_string には DataTable の内容をどういう形で格納したいのですか? 「その配列をそのまま次の処理につなげたい」とのことなので、その処理に必要な形にすると思いますが、それはどういうものかという質問です。
Datatable「DistDT」のカラム「STAFCODE」はDatatype:system.String となっています。
>arr_string には DataTable の内容をどういう形で格納したいのですか?
String型の配列に格納したいです。
よろしくお願いします。
> Datatable「DistDT」のカラム「STAFCODE」はDatatype:system.String となっています。
全ての列のことを聞いてます。
> String型の配列に格納したいです。
それは私に期待した答えになってないのですが、とにかく回答にそのあたりも書きましたので見てください。
回答2件
あなたの回答
tips
プレビュー