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

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

新規登録して質問してみよう
ただいま回答率
85.47%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

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

Q&A

1回答

5356閲覧

vb.Net DataTable 空白がトリムされる

K0heii

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

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

0グッド

0クリップ

投稿2020/06/08 02:05

vb.netについてお伺いさせて頂きます。

WebService内にSQL SELECT文を発行し、データを取得するためのFunctionを
作ってvb.net側から呼び出してDataTableに格納しているのですが、
空白(固定長)のデータが存在し、その空白が全てトリムされてしまうのです。

固定長のデータなので空白埋めされている状態でデータを取得したいのですが
トリムされてしまって困っています。

もし、分かる方いらっしゃればお力をお貸し頂ければと思います。
すみません、よろしくお願いします。

一応、コードを記載しておきます。

Dim dt As New dataTable

dt= データ取得用関数

If dt Is Nothing Then Return
If dt.Rows.Count = 0 Then Return

ラベル1.Text = dt.Rows(0)("カラム1").ToString
ラベル2.Text = dt.Rows(0)("カラム2").ToString
ラベル3.Text = dt.Rows(0)("カラム3").ToString

※[dt]の中身を確認すると空白がトリムされてしまっています。

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

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

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

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

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

YAmaGNZ

2020/06/08 02:29

SQLServerからデータを取得するWebAPIを作成し、それをVB.NETで作成したプログラムから呼び出してDataTableに格納しているということですか?
K0heii

2020/06/08 02:52

ありがとうございます。 言葉足らずで申し訳ありません。 そうですね、その解釈で間違いないです。
YAmaGNZ

2020/06/08 03:04

そうなると、「データ取得用関数」の中でWebAPIを呼び出して、その結果をDataTableに格納していると思うのですが、その段階で空白は存在していて、その関数から戻って、値を表示しようとしたら空白が消えているということですか?
K0heii

2020/06/08 05:14

えーっと… もう少し詳しくご説明させて頂くと、DataTableに格納した値をデバッグ中に ブレイクして確認してみたのですが、その時点でDataTableの値から空白は消えていました。 なので表示しようとする前の段階で消えてしまっていますね…
YAmaGNZ

2020/06/08 05:41

その時、「DataTableに格納した値」ではなく「DataTableに格納する値」を確認しましたか? WebAPIからどのような形式で受け取っているのか分かりませんが、受け取った時点で消えているのか、WebAPIから受け取った形式からの変換で消えているのか分かりますか? どこの段階で空白が消去されているのか確定してください。 そして、その確定した部分の情報を質問に追記するなりしてください。
K0heii

2020/06/08 09:01

すみません、DataTableに格納する値はSQL Server Manegement Studioからクエリを投げて 空白が入っていることまでは確認しています。 WebAPIの方は様々な値を保持するためのクラスがあり、その中の一つにDataTableがあります。 そこに格納して、クラスごと返しています。 確認してみたのですが、どうもWebAPIから受け取った段階で空白が削除されてるようです
YAmaGNZ

2020/06/08 10:45

DataSetを使うような形に変えてもだめですかね?
K0heii

2020/06/08 11:06

DataSetに格納したらいけました!! まさかこんなことがあるとは… 長々とすみません、いろいろとお知恵をお借りさせて頂きました! 本当にありがとうございましたm(__)m 原因についてはもう少し究明してみます
YAmaGNZ

2020/06/08 11:14

さっと検索した感じ、DataTableのXML変換まわりでスペースや改行が変換されてしまうようです。
K0heii

2020/06/08 11:23

原因まですみません、お手数おかけしましたm(__)m なるほど、XML変換のときにそうなってしまうんですね… 本当に助かりました!ありがとうございましたm(__)m
guest

回答1

0

昔、ODBC 接続でRTRIM(右側の空白が落とさる)が有無を言わせずに実行されるのをなんとかできないか?って相談された時は、空白に意味があるテーブル設計は避けることで対応しては?って納得してもらいました。

投稿2020/06/08 03:04

Orlofsky

総合スコア16415

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

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

K0heii

2020/06/08 04:05

ご回答ありがとうございます。 あまり詳しくは言えないのですが、空白を持つデータというのもこちらで入力した情報ではなく 外部から受け取る情報でして、それに準ずる必要があるため、そのような仕様なのです。 わざわざご回答頂いたのにすみません。 ありがとうございます。
Orlofsky

2020/06/08 04:25 編集

RTRIMした結果と比較(全部空白の場合はNULL)で対応できるのでは? 汎用コンピュータからデータ移行する時に、時々空白をそのまま扱うことに命をかける人がいて、最後はオープン系への移行を中止して今のまま汎用機で維持し続けますか?新卒の新人にCOBOLを教えることになりますが、人事部が了解してくれますか?きょうまでの費用と違約金を頂いて撤収することになりますが、ちゃんと費用はいただけますよね?と教育的指導することもあります。
K0heii

2020/06/08 11:12

ありがとうございます。 確かにその方法でも可能ですね。 わざわざ情報を提供いただき、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問