C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: anyURI型へのデータ格納


(過去ログ 95 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■56464 / inTopicNo.1)  anyURI型へのデータ格納
  
□投稿者/ ペンギン (8回)-(2011/01/14(Fri) 14:26:41)

分類:[.NET 全般] 

こんにちは

String型のオブジェクトをデータセットのURI型項目に格納するとエラーが発生します。

以下を実施した際、System.ArgumentExceptionが発生します。

--------------------------------------------------------------------------------------------------
private namespace.DS_WORKERCD dS_WORKERCD1;
DataRow oDataRow;
oDataRow = dS_WORKERCD1.Tables[oDataRowArray[0]["MAIN_TBL"].ToString()].NewRow();
oDataRow[oDataRowArray2[j]["FIELD_ID"].ToString()] = DATA_DS.Tables[PA_FORM_ID].Rows[i][oDataRowArray2[j]["FIELD_ID"].ToString()];//ここの処理でエラーがキャッチされます
--------------------------------------------------------------------------------------------------

エラーメッセージは以下の通りです。

「System.ArgumentException: 値の型が列の型と合いません。」
「値の型が列の型と合いません。列 WKCD に <testname> を格納できませんでした。 必要な型は Uri です。」

DS_WORKERCD.xsdの定義情報は以下の通りです。
---------------------------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes" ?>
<xs:schema id="DS_WORKERCD" targetNamespace="http://www.tempuri.org/DS_WORKERCD.xsd" xmlns:mstns="http://www.tempuri.org/DS_WORKERCD.xsd"
xmlns="http://www.tempuri.org/DS_WORKERCD.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="DS_WORKERCD" msdata:IsDataSet="true" msdata:Locale="ja-JP">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="M_WORKERCD">
<xs:complexType>
<xs:sequence>
<xs:element name="WKCD" type="xs:anyURI" />
<xs:element name="WKNM" type="xs:anyURI" minOccurs="0" />
<xs:element name="SECT" type="xs:anyURI" minOccurs="0" />
<xs:element name="BARCODE" type="xs:anyURI" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
----------------------------------------------------------------------------------------------------

String型の値をデータセットのanyURI型の項目に挿入することが出来ないため、エラーが発生していると考えております。
対応方法を教えていただけないでしょうか。

よろしくお願い致します。
引用返信 編集キー/
■56465 / inTopicNo.2)  Re[1]: anyURI型へのデータ格納
□投稿者/ 魔界の仮面弁士 (2021回)-(2011/01/14(Fri) 14:41:38)
No56464 (ペンギン さん) に返信
> String型のオブジェクトをデータセットのURI型項目に格納するとエラーが発生します。
URI ではなく、Uri ですよね。

> 以下を実施した際、System.ArgumentExceptionが発生します。
oDataRow[col] = "http://www.google.com/";
という処理を、
oDataRow[col] = new Uri("http://www.google.com/");
に変更してみては如何でしょう。
引用返信 編集キー/
■56467 / inTopicNo.3)  Re[2]: anyURI型へのデータ格納
□投稿者/ ペンギン (9回)-(2011/01/14(Fri) 15:09:16)
ありがとうございます。

大変申し訳ございませんが、教えて頂いた対処法を上記ソースのどこに実装すれば良いのかよく分かっていません。
もう少し詳しく教えて頂けませんでしょうか。

よろしくお願いします。
引用返信 編集キー/
■56469 / inTopicNo.4)  Re[3]: anyURI型へのデータ格納
□投稿者/ 魔界の仮面弁士 (2022回)-(2011/01/14(Fri) 15:28:52)
2011/01/14(Fri) 15:39:38 編集(投稿者)

No56467 (ペンギン さん) に返信
> 教えて頂いた対処法を上記ソースのどこに実装すれば良いのかよく分かっていません。

具体的には、
>> oDataRow[oDataRowArray2[j]["FIELD_ID"].ToString()] = DATA_DS.Tables[PA_FORM_ID].Rows[i][oDataRowArray2[j]["FIELD_ID"].ToString()];
の部分です。上記の長い一行を書き換えると、
 string colName = oDataRowArray2[j]["FIELD_ID"].ToString();
 object data = DATA_DS.Tables[PA_FORM_ID].Rows[i][colName];
 oDataRow[colName] = data;
になるわけですが、その最後の部分を
 oDataRow[colName] = new Uri((string)data);
にするという事です。(列名等を変数に受けるか、一行で書いてしまうかはお好みで)


ただしソース以前に、データの内容にも問題があります。

エラーメッセージが
>「値の型が列の型と合いません。列 WKCD に <testname> を格納できませんでした。 必要な型は Uri です。」
になるという事は、現状のコードは
 oDataRow[colName] = "testname";
に相当する処理が行われた物と想像します。しかし "testname" は有効な URI ではありませんので、
元データを直さない限り System.Uri 型として扱う事はできません。new Uri(data) が使える形式は、
たとえば "ftp://ftp.unicode.org/Public/UNIDATA/EastAsianWidth.txt" とか
"http://www.w3.org/2001/XMLSchema" とか "urn:isbn:4-939039-02-1" とか
"tel:81+120-220-340" などといった文字列です。
引用返信 編集キー/
■56474 / inTopicNo.5)  Re[4]: anyURI型へのデータ格納
□投稿者/ ペンギン (10回)-(2011/01/14(Fri) 17:17:02)
ご回答ありがとうございます。

指摘されたとおり、oDataRow[oDataRowArray2[j]["FIELD_ID"].ToString()] = new Uri("http://www.w3.org/2001/XMLSchema");
のようにコーディングを実施した結果、当処理に関してはエラーが発生しなくなりました。

しかし今回oDataRow[oDataRowArray2[j]["FIELD_ID"].ToString()]に入れたいデータは従業員名などの文字列です。

URIの意味をよく理解していませんでした。
すみません。ありがとうございます。

String型を格納したい場合はDS.WORKERCDの定義は以下のようになるのでしょうか。
--------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes" ?>
<xs:schema id="DS_WORKERCD" targetNamespace="http://www.tempuri.org/DS_WORKERCD.xsd" xmlns:mstns="http://www.tempuri.org/DS_WORKERCD.xsd"
xmlns="http://www.tempuri.org/DS_WORKERCD.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:element name="DS_WORKERCD" msdata:IsDataSet="true" msdata:Locale="ja-JP">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="M_WORKERCD">
<xs:complexType>
<xs:sequence>
<xs:element name="WKCD" type="xs:System.String" />
<xs:element name="WKNM" type="xs:System.String" minOccurs="0" />
<xs:element name="SECT" type="xs:System.String" minOccurs="0" />
<xs:element name="BARCODE" type="xs:System.String" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
---------------------------------------------------------------------------------

これだとxsは"http://www.w3.org/2001/XMLSchema"を参照しているのでコンパイルエラーが発生してしまいます。
対処方法を教えて頂けないでしょうか。

基本的なことかもしれませんが、よろしくお願いいたします。
引用返信 編集キー/
■56476 / inTopicNo.6)  Re[5]: anyURI型へのデータ格納
□投稿者/ 魔界の仮面弁士 (2023回)-(2011/01/14(Fri) 18:21:50)
No56474 (ペンギン さん) に返信
> String型を格納したい場合はDS.WORKERCDの定義は以下のようになるのでしょうか。
Visual Studio をお持ちなら、それで xsd を作成すれば、悩まなくて済むかと思います。

DataSet デザイナならプロパティから型を選ぶだけで済みますので、
スキーマの記述方法を知らなくても作成できます。

自分でスキーマを手書きするにしても、VS の XML エディタで記述すれば、
type= と書いた段階で、指定可能な型の一覧がインテリセンスに表示されます。


> <xs:element name="WKCD" type="xs:System.String" />
System.String という型は定義されていません。
 type="xs:anyType"
 type="xs:string"
 type="xs:normalizedString"
などであれば指定できますけれどね。

ちなみに .NET 側の型を追加指定したい場合には、type 属性とは別に、
名前空間 "urn:schemas-microsoft-com:xml-msdata" の DataType 属性を使います。
今回は使う必要が無さそうですけれども。

msdata:DataType="System.String"
引用返信 編集キー/
■56605 / inTopicNo.7)  Re[6]: anyURI型へのデータ格納
□投稿者/ ペンギン (11回)-(2011/01/21(Fri) 11:28:43)
ありがとうございます。

教えて頂いた方法で無事問題は解決しました。

返信が遅くなってしまいすみません。

また何かありましたら宜しくお願いします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -