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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 >>
■13030  Re[6]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん -(2008/01/23(Wed) 16:42:50)
>
    No13019 (セイン さん) に返信

    > 調べる方法はあるのでしょうか?
    > 下の方法でよいのですよね?
    > >if( MsiQueryProductState( _T("{7299052b-02a4-4627-81f2-1818da5d550d}") ) >= >INSTALLSTATE_ABSENT )
    > >{
    > > // インストール済み
    > >}
    >
    はい。これで行けます。
    「ただし」VS2005 でモジュールを作っているのであれば、別途 WindowsSDK か、PlatformSDK(どっちを入れてもよい)が必要です。
    なぜかって?x86用のmsi.libがないから...
    #VS2008なら入ってるんですけどね...orz

    WindowsInstaller のAPIを使う場合や、Custom Actions(.NET FrameworkのInstallerクラスを使うカスタム動作ではありません)を利用する場合は、必ずSDKを別途入れないとだめなんですよね...


    > すいません→product.xml を探してみたのですが、どのファイルのことなのでしょうか?
    > お願いします。
    >
    おいらの環境(VS2005でインストール先を変えずに入れた環境)では
    C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\product.xml
    になります。
    ただし、このパスはおいらの環境なので、Microsoft Visual Studio 8 の部分までは違う可能性はあります。
    C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages
    のサブフォルダ(フォルダごとにproduct.xmlがあります)にあるものがそのまま
    必須コンポーネントの個々のエントリーになります。

    ちなみに、VS2008では C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages
    ですね(これもおいらの環境の場合ですけどねw)。
記事No.12998 のレス /過去ログ28より / 関連記事表示
削除チェック/

■13031  Re[7]: ランタイムパッケージインストール済みチェック方法
□投稿者/ とっちゃん -(2008/01/23(Wed) 16:45:07)
>
    No13030 (とっちゃん さん) に返信

    書き忘れ。

    上記APIを使う場合は、msi.h のinclude が必要です。
    また、LoadLibraryしない場合は、msi.libも必要です(こちらのために別途SDKが必要...)。

    また、SDKのパスが正しく設定されていない場合はリンクエラーが出るのでその点も注意が必要です。
記事No.12998 のレス /過去ログ28より / 関連記事表示
削除チェック/

■13046  Re[8]: ランタイムパッケージインストール済みチェック方法
□投稿者/ セイン -(2008/01/23(Wed) 20:46:41)
    2008/01/23(Wed) 21:01:53 編集(投稿者)

    とっちゃん様

    まるで僕の動きが見えているかのフォローありがとうございますw

    >上記APIを使う場合は、msi.h のinclude が必要です。
    ご指摘のとおり探してインクルードしました^^

    >また、LoadLibraryしない場合は、msi.libも必要です(こちらのために別途SDKが必要...)。
    こちらもインクルードしました。
    僕の環境では下記
    C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\AMD64\Msi.Lib

    >また、SDKのパスが正しく設定されていない場合はリンクエラーが出るのでその点も注意が必要です。
    ここで詰まっています。。。

    外部シンボル "__imp__MessageBoxA@16" は未解決です。
    外部シンボル "__imp__ShellExecuteA@24" は未解決です。
    外部シンボル "__imp__LoadIconA@8" は未解決です。
    外部シンボル "__imp__LoadCursorA@8" は未解決です。
    外部シンボル "__imp__RegisterClassExA@4" は未解決です。

    このようなエラーが複数発生し、コンパイルが通りません。
    自分でいろいろ調べたのですが、わかりませんでした。
    どうすればよろしいでしょうか?



    追記
    AMD64の下を参照しようとしていますが、僕のマシーンは64ビットではないので、
    これに問題があるのでしょうか?

    C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib
    このディレクトリの下にmsi.libがいないので、どうすればいいか悩んでおります。



記事No.12998 のレス /過去ログ28より / 関連記事表示
削除チェック/

■13053  Re[9]: ランタイムパッケージインストール済みチェック方法
□投稿者/ やじゅ -(2008/01/23(Wed) 22:19:29)
>
    No13046 (セイン さん) に返信
    > 2008/01/23(Wed) 21:01:53 編集(投稿者)
    >> >また、LoadLibraryしない場合は、msi.libも必要です(こちらのために別途SDKが必要...)。
    > こちらもインクルードしました。
    > 僕の環境では下記
    > C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\AMD64\Msi.Lib
    >
    > 追記
    > AMD64の下を参照しようとしていますが、僕のマシーンは64ビットではないので、
    > これに問題があるのでしょうか?
    >

    Visual Studio 2005 シリーズには msi.lib がありません。
    http://blogs.wankuma.com/tocchann/archive/2006/05/17/25243.aspx
    x64/IA64 用はあるんですがね。肝心の x86 用が欠落しています。
    別途 PlatformSDK をインストールすることで導入できますので、そちらを利用してください。
記事No.12998 のレス /過去ログ28より / 関連記事表示
削除チェック/

■13043  VB.NETマルチスレッドの名前指定と終了
□投稿者/ モー -(2008/01/23(Wed) 20:34:28)

    分類:[VB.NET/VB2005] 

    現在VB.NETにてマルチスレッドの構築を行っています。

    内容としては

    アプリ起動後、複数スレッドを起こし、それぞれに名前を付け同時に動作させつつ、

    その中の指定したスレッド一つをボタンイベントで強制終了したいのですが、

    その指定(取得)の仕方が分かりません。

    ご教授下さい。


    ==概略ソース==

    Public Class Form1

    Dim cls As New TaskClass
    Dim thread1 As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf cls.PageChange))

       thread1.start()
       thread1.Name = strName

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    ''★ここで希望の名前のスレッドを強制終了したいです

    End Sub
    End Class

    Class TaskClass
    Sub PageChange()

    End Sub
    End Class
親記事 /過去ログ29より / 関連記事表示
削除チェック/

■13047  Re[1]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ シャノン -(2008/01/23(Wed) 21:05:47)
    No13043 (モー さん) に返信
    > 現在VB.NETにてマルチスレッドの構築を行っています。
    >
    > 内容としては
    >
    > アプリ起動後、複数スレッドを起こし、それぞれに名前を付け同時に動作させつつ、
    >
    > その中の指定したスレッド一つをボタンイベントで強制終了したいのですが、
    >
    > その指定(取得)の仕方が分かりません。
    >
    > ご教授下さい。

    どうも、現在のプロセス中の Thread オブジェクトを列挙する方法は無いみたいです。
    また、スレッドの強制終了というのは望ましいことではありません。
    スレッドは、継続フラグが立っている限りループ処理して、継続フラグがOFFになったら、スレッドプロシージャ(Threadクラスのコンストラクタに渡したデリゲートに結びつくメソッド)からReturnするという形で自然に終了すべきです。
    TaskClassのメンバ変数として、スレッド名と継続フラグのペアを用意しておき、各スレッドプロシージャは、ループを1回終える度にそのペアを自分のスレッド名で参照して、フラグがOFFになっていたらReturnするというのが良いのではないでしょうか。
記事No.13043 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13054  Re[2]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ モー -(2008/01/23(Wed) 22:34:40)
    No13047 (シャノン さん) に返信

    > どうも、現在のプロセス中の Thread オブジェクトを列挙する方法は無いみたいです。
    > また、スレッドの強制終了というのは望ましいことではありません。
    > スレッドは、継続フラグが立っている限りループ処理して、継続フラグがOFFになったら、スレッドプロシージャ(Threadクラスのコンストラクタに渡したデリゲートに結びつくメソッド)からReturnするという形で自然に終了すべきです。
    > TaskClassのメンバ変数として、スレッド名と継続フラグのペアを用意しておき、各スレッドプロシージャは、ループを1回終える度にそのペアを自分のスレッド名で参照して、フラグがOFFになっていたらReturnするというのが良いのではないでしょうか。


    シャノンさんありがとうございます。

    強制終了が好ましくないことは承知しておりますが、実際問題として10個のスレッドを同時に動作している最中に
    そのうちの1個だけがフリーズした場合にそれを終了させ、残りの9個は動作させ続けたいのです。

    またそのフリーズしたスレッドからは信頼できる情報が取得できるとは限らないので、外部から強制終了するしかないと思います。

    そうした場合に、ボタンイベントで外部からthread1.Name等を用いて???.Abort()のような記述で終了させられないかと悩んでいます。
    もし代替案や同等の記述がありましたら教えて頂けませんか?
記事No.13043 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13057  Re[3]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ れい -(2008/01/23(Wed) 23:13:30)
    No13054 (モー さん) に返信
    > 強制終了が好ましくないことは承知しておりますが、実際問題として10個のスレッドを同時に動作している最中に
    > そのうちの1個だけがフリーズした場合にそれを終了させ、残りの9個は動作させ続けたいのです。

    そもそもフリーズすることがおかしいので、
    普通ならそういう「実際問題」になることはありません。
    そういう場合には、フリーズしたらどうするか、ではなく、フリーズしないように考えます。

    > またそのフリーズしたスレッドからは信頼できる情報が取得できるとは限らないので、外部から強制終了するしかないと思います。
    > そうした場合に、ボタンイベントで外部からthread1.Name等を用いて???.Abort()のような記述で終了させられないかと悩んでいます。

    どうしてもやりたいなら、
    DictionaryやHashTableにスレッド名とスレッドオブジェクトを入れておいて、
    それを参照して殺せばいいのではないでしょうか?

    private threadlist as Dictionary(Of String, Thread)

    Private Sub XXX()
    dim thread1 As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf cls.PageChange))
    thread1.start()
    threadlist.Add(strName, thread1)
    End Sub

    ...

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    if threadlist.Contains(textbox1.text) then
    threadlist(textbox1.text).Abort
    end if

    End Sub

    激しく適当ですが、こんな感じで。
記事No.13043 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13056  Re[3]: VB.NETマルチスレッドの名前指定と終了
□投稿者/ 片桐 -(2008/01/23(Wed) 23:09:48)
>
    あー、強制的にこのアプリ落としたい、ってことですね<おい

    簡単な方法としては、アプリを列挙して、該当タイトルもしくはハンドルを持つアプリを引っ張ってきて落とす、という手順ですが

    落とすアプリから見て、
    落としたいアプリのWindowハンドルもしくはスレッドハンドルが取得可能(アクセス可能)である
    落とすアプリの実行ユーザーが、落としたいアプリと同一ユーザーもしくはアドミニストレーター
    という条件がそろって初めて、

    問題のアプリにWindowハンドルがいるならWindowCloseの処理、スレッドならスレッドAbortで実装できるんじゃないかと思います

    まぁそれもできて、実装したとして、強制終了する命令、つまりシグナルを落としたいアプリが受け取れる状態になければ逆に負荷をかけてしまうリスクもありますが……

    そのあたりの問題はクリアでしょうか?

記事No.13043 のレス /過去ログ29より / 関連記事表示
削除チェック/

■13723  Re[3]: この掲示板について
□投稿者/ よねKEN -(2008/02/03(Sun) 12:48:55)
    > >>よねKENさん
    > 言いたいことがあるならここに書かれてはどうでしょうか?

    向こうにも書いた内容も含みますが、私のスタンスは以下の通り。

    ・去年8月の全角半角質問のスレは当時見ていましたが、heiさんの言いたいことは理解できる。
    個人的な独断で言えば、中さんが悪い。
    (というか、文字コード話に花を咲かせてしまった他の参加者の大多数も。
    あの状況なら質問者の定義を確認するまで、みんな待機でしょ。)

    ・最低限のマナーとして、他人の立ち上げたスレでそのスレの主旨から極端に
     外れた内容で盛り上がって、迷惑をかけていい道理はない。

    ・8月スレの中さんの発言は管理人としての発言ではないし、前スレは管理人さんへの提言なので、
    一個人としての中さんへどうこういうスレではない。

    上記内容と同じ指摘は前スレ、本スレの中で挙がってますよね。
    だから、言いたいことはあっても、他の人の意見とかぶっていることばかりだからあえて書きませんでした。
    後、堂々巡りしていて終わりが見えないので、めんどくさいと書きました。

    > 自分のことは棚に上げて、
    > 日本文化の衰退を「憂いでいる」ことに我慢できなかったのです。

    このことに他者の同意が得られるまで続けるつもりですか?

    > これ以上やっても私にも何の進展もなさそうなので、

    中さんと直接やりとりしないで進展が望めるわけがないと思うのですが、
    このスレでいったい何を得たいのでしょう?
    ご自身の意見に対する多くの同意ですか?
記事No.13561 のレス /過去ログ29より / 関連記事表示
削除チェック/

■20062  WINDOWS7のタッチパネル機能について他
□投稿者/ 福田 -(2008/06/05(Thu) 07:52:51)

    分類:[雑談] 

    WINDOWS7が2010年あたりに登場してくるとのこと聞きました。
    何でもタッチパネル機能が標準装備されているということらしいのですが
    今持っているPCにインストールすれば、どのソフトもタッチパネルが
    使えるということと理解してよいのでしょうかね。

    ま、現在でもタッチパネルが売られており、ドライバを組み込めば
    ソフトは画面タッチで動きます。ただ、精度が多少悪いのが気になりますが。

    我が輩はいまだにXPを使っていますが、これで正解だったと思ってます。
    (余談ですがXPSP3を導入すると再起動を繰り返す不具合が確認されていると
     聞いていますが、本当なのでしょうか}

    Vistaのできの悪さにはうんざりしていたので、WINDOWS7には若干期待しています。
    結局vistaは、MEと同じ運命をたどったOSというなのかな。
親記事 /過去ログ39より / 関連記事表示
削除チェック/

■20065  Re[2]: WINDOWS7のタッチパネル機能について他
□投稿者/ 福田 -(2008/06/05(Thu) 09:15:27)
    No20063 (アクア さん) に返信
    > VistaとMeとは問題点の本質がまるで違う。
    > 
    「結局vistaは、MEと同じ運命をたどったOSというなのかな。」の部分は
     深く考えていったつもりはないのでつっこまないでくだされ。
     余計なことはかかないようにします。
    
    下記の質問よろしくね。
    
    
    WINDOWS7が2010年あたりに登場してくるとのこと聞きました。
    何でもタッチパネル機能が標準装備されているということらしいのですが
    今持っているPCにインストールすれば、どのソフトもタッチパネルが
    使えるということと理解してよいのでしょうかね。
    
    ま、現在でもタッチパネルが売られており、ドライバを組み込めば
    ソフトは画面タッチで動きます。ただ、精度が多少悪いのが気になりますが。
    
    我が輩はいまだにXPを使っていますが、これで正解だったと思ってます。
    (余談ですがXPSP3を導入すると再起動を繰り返す不具合が確認されていると
     聞いていますが、本当なのでしょうか}
    
記事No.20062 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20100  Re[2]: WindowsInstaller カスタム動作について
□投稿者/ ノート -(2008/06/05(Thu) 16:56:41)
    2008/06/09(Mon) 01:04:50 編集(投稿者)

    > ところで、なぜインストール時やアンインストール時にインストール先フォルダに細工が必要なのでしょう?
    > そこを書けば別の回避策を提示してもらえる可能性もありますよ。

    ご回答ありがとうございます。
    インストールクラスで何をしているかと言いますと

    インストール時
    ngen install [TARGETDIR]XXX.exe

    アンインストール時
    ngen uninstall [????]XXX.exe

    の様にインストールしたexeに対してnegenを実行し
    アンインストール時にキャシュから削除したいが為でございます。
記事No.20092 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20101  Re[10]: SQLであいまいな文字の検索範囲を広げたい
□投稿者/ はまや -(2008/06/05(Thu) 17:02:50)
    出来ました!
    [+]をクリックしないとソースが見れないというのに気づくのが遅くて
    ずっとRegexMatch()を独自に組んでいましたが、
    気づいたのでソースのコピーだけで終わりました。

    その間、正規表現の書式を勉強していましたが
    文字列の中から「0-9の文字だけを抽出」なんていうものは
    無いんですね、結局Regex.Replace()が出てくるのですか
    みなさんが言ってる意味にやった辿り付けました。

    「電話番号の分解」スレで語られているように電話番号は難しいんですね
    入力フォーマットの固定化から検討が必要な気がしてきました。
    ネタ好きさんの言うとおり、ハイフンの位置を持つのも良いかもしれませんね

    何はともあれ、SQL CLR統合は面白そうです
    これを学べただけでも、かなりの収穫です。

    では、改めて「解決済み」にチェックを入れたいと思います
    ありがとうございました。
記事No.20045 のレス / END /過去ログ39より / 関連記事表示
削除チェック/

■20102  Re[4]: DataGirdViewでメモリが解放されない
□投稿者/ ぐっちょん -(2008/06/05(Thu) 17:22:52)
    レスありがとうございます。

    >DataGridViewRow のインスタンスから、Cells コレクションを取得し、
    >その中の i 番目のセルを取得する…という処理を繰り返しているようですが、
    >それはあまり、効率の良いやり方では無いような気がします。
    そうなんですよねー
    ただ、DataTableで取得するわけにもいかなくて、
    軽い方法で実装するとDataReaderになってしまうのです。
    DataReaderで取得したデータをDataGridViewに格納する為に、この方法で実装しています。
    (根本から間違ってるかもしれません。少し自信ない)

    >リークというと、アプリを終了してもメモリ使用量が減らないと言う意味でしょうか?
    はい、メモリリークの使い方が間違っていたようです。
    アプリを終了すると、メモリは解放されます。
    アプリを実行している間に、メモリ使用量が蓄積されていきます。

    >まずは、下記に目を通しておくと良いかも知れません。
    見てみます。
記事No.20093 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20107  Re[5]: DataGirdViewでメモリが解放されない
□投稿者/ Jitta on the way -(2008/06/05(Thu) 19:43:46)
    No20102 (ぐっちょん さん) に返信
    > レスありがとうございます。
    >
    > >DataGridViewRow のインスタンスから、Cells コレクションを取得し、
    > >その中の i 番目のセルを取得する…という処理を繰り返しているようですが、
    > >それはあまり、効率の良いやり方では無いような気がします。
    > そうなんですよねー
    > ただ、DataTableで取得するわけにもいかなくて、
    > 軽い方法で実装するとDataReaderになってしまうのです。
    > DataReaderで取得したデータをDataGridViewに格納する為に、この方法で実装しています。
    > (根本から間違ってるかもしれません。少し自信ない)

    なぜ、DataTable で取得出来ないのでしょう?
    軽い方法とは?何にたいして、何が軽いのでしょう?
記事No.20093 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20106  Re[5]: DataGirdViewでメモリが解放されない
□投稿者/ 魔界の仮面弁士 -(2008/06/05(Thu) 19:42:47)
    2008/06/05(Thu) 19:45:32 編集(投稿者)

    No20102 (ぐっちょん さん) に返信
    >> DataGridViewRow のインスタンスから、Cells コレクションを取得し、
    >> その中の i 番目のセルを取得する…という処理を繰り返しているようですが、
    > ただ、DataTableで取得するわけにもいかなくて、

    DataReader で得たデータを DataTable に格納して使ってはいけないのでしょうか?
    今のままだと、DataGridView 内には件数分の行インスタンスが生成されることになりますが、
    データバインドを使えば、DataGridView では行のインスタンスを共有させる事ができるため、
    メモリ効率が良くなるように思えます。


    それと、私が先に書いたのは、データバインドの事を指しているわけではなく、
    プロパティの参照回数を減らした方が良いのでは無いか、という意図のものでした。

    たとえば、
     DataGridView1.Rows(0).Cells(0).Value = data
    とするかわりに、
     DataGridView1(0, 0).Value = data
    とすると、プロパティの参照回数を抑える事ができるかと思います。

    前者だと、DataGridView → DataGridViewRowCollection → DataGridViewRow
    → DataGridViewCellCollection → DataGridViewCell → Object という順序で
    参照されていきますが、後者の書き方にすれば、それぞれのプロパティ参照は
    DataGridView → DataGridViewCell → Object という手順で済むので、
    コレクションを毎回取得する手間がわずかながらも省略できるかな、と。


    あるいは、Rows や Cells などの参照を、ループ内で毎回繰り返させるのではなく、
    それらを変数にキャッシュしておいて
     Dim cells As DataGridViewCellCollection
     cells = DataGridView1.Rows(row).Cells
     For i As Integer = 0 To dr.FieldCount - 1
      cells(i).Value = dr(i)
     Next
    という書き方にする手法もあるかと思います。
    (いずれにしても、データバインドにした方が効率は良いと思いますけれども)


    > 軽い方法で実装するとDataReaderになってしまうのです。
    (ASP.NET などのように)シーケンシャルなアクセスで良い場合には都合が良さそうですが、
    今回のように、対象データすべてを表示させなければならないような状況においては、
    むしろ効率が悪いかも知れません。セルを For で列挙するコストも馬鹿にならないので。

    DataReader から 個別のセルに割り当てる今の方法と、(DataAdapter 等から)
    DataTable に取り込んだものをバインドさせる方法とで、それぞれの
    処理速度およびメモリ効率について、比較実験してみてはいかがでしょう。


    > アプリを実行している間に、メモリ使用量が蓄積されていきます。
    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1944927&SiteID=7
記事No.20093 のレス /過去ログ39より / 関連記事表示
削除チェック/

■20104  XmlDataSourceでのプルダウンメニューの実現
□投稿者/ studyC# -(2008/06/05(Thu) 17:53:46)

    分類:[ASP.NET (C#)] 

    こんにちわ。

    プルダウンメニューでXmlDataSourceを使って、リストの選択肢をxmlファイルの中から取ってきて表示するようにしたいと思っています。

    そこで、xmlファイルとして次のようなデータファイルを用意し、

    <?xml version="1.0" standalone="yes"?>
    <DataSet>
    <Person>
    <name>Taro</name>
    <age>18</age>
    </Person>
    <Person>
    <name>Ziro</name>
    <age>20</age>
    </Person>
    </DataSet>


    XmlDataSourceは属性のみ認識するようなので、xsltとして次のxslファイルを用意し、


    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/DataSet">
    <DataSet>
    <xsl:apply-templates/>
    </DataSet>
    </xsl:template>

    <xsl:template match="Person">
    <Person>
    <xsl:attribute name="name">
    <xsl:value-of select="name"/>
    </xsl:attribute>
    </Person>
    </xsl:template>
    </xsl:stylesheet>


    変換してやると、ちゃんとプルダウンメニューにTaro、Ziroが表示されるようになりました。
    ちなみに、上記のxslで変換すると次のようなxmlになります。

    <DataSet>
    <Person name="Taro"/>
    <Person name="Ziro"/>
    </DataSet>


    と、ここまでは良かったのですが、次に上記のxmlにスキーマを定義したところ、以下のようなエラーがでるようになってしまいました。

    「指定したノードをこのノードの有効な子ノードとして挿入できません。指定されたノードの種類が正しくありません。 」

    定義したスキーマは以下のとおりです。

    <?xml version="1.0" standalone="yes"?>
    <xs:schema id="PersonDataSet" targetNamespace="http://tempuri.org/PersonDataSet.xsd" xmlns:mstns="http://tempuri.org/PersonDataSet.xsd" xmlns="http://tempuri.org/PersonDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
    <xs:element name="PersonDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Person">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="name" minOccurs="0">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="10" />
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="age" type="xs:int" minOccurs="0" />
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:choice>
    </xs:complexType>
    </xs:element>
    </xs:schema>


    どうやら、xslで変換後のxmlに対してもスキーマの定義が効いてるようで、スキーマで定義した形式以外のxmlにしようとしていることからエラーがでてるようです。


    そこで、質問ですが、上記のようにスキーマを定義してXmsDataSourceを使いたい場合はどのようにすればいいでしょうか。
    xmlは現在勉強中で、ここから解決策がでてこず困っています。
    わかる方がいらっしゃいましたら、教えてもらえると有難いです。
    よろしくお願いいたします。
親記事 /過去ログ39より / 関連記事表示
削除チェック/

■20126  Re[1]: XmlDataSourceでのプルダウンメニューの実現
□投稿者/ studyC# -(2008/06/06(Fri) 11:48:21)
    こんにちわ。
    
    自己レスです。
    まだ私がxmlをよく理解していないのですが、どうやら名前空間の指定がよくなかったみたいです。
    
    
    以前の投稿では、以下のようにxmlファイルにxmlns="http://tempuri.org/PersonDataSet.xsd"を付けたしてスキーマを宣言して実行するとエラーが発生していました。
    
    <?xml version="1.0" standalone="yes"?>
    <DataSet xmlns="http://tempuri.org/Person.xsd">
    	<Person>
    		<name>Taro</name>
    		<age>18</age>
    	</Person>
    	<Person>
    		<name>Ziro</name>
    		<age>20</age>
    	</Person>
    </DataSet>
    
    
    そこで、この指定を外して以下のようにするとうまくいきました。
    
    ----------------------
    xmlファイル
    ----------------------
    <?xml version="1.0" standalone="yes"?>
    <PersonDataSet>
    	<Person>
    		<name>Taro</name>
    		<age>18</age>
    	</Person>
    	<Person>
    		<name>Ziro</name>
    		<age>20</age>
    	</Person>
    </PersonDataSet>
    
    ----------------------
    xslファイル
    ----------------------
    <?xml version="1.0" encoding="UTF-8" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/PersonDataSet">
    <DataSet>
    	<xsl:apply-templates/>
    </DataSet>
    </xsl:template>
    
    <xsl:template match="Person">
    	<Person>
    		<xsl:attribute name="name">
    			<xsl:value-of select="name"/>
    		</xsl:attribute>
    	</Person>
    </xsl:template>
    
    </xsl:stylesheet>
    
    ----------------------
    xsdファイル
    ----------------------
    <?xml version="1.0" standalone="yes"?>
    <xs:schema id="PersonDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
      <xs:element name="PersonDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
        <xs:complexType>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Person">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="name" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:maxLength value="10" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="age" type="xs:int" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    
    ----------------------
    Aspのソース
    ----------------------
    <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="XmlDataSource1" DataTextField="name" DataValueField="name">
    </asp:DropDownList>
    <asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/person.xml"
                TransformFile="~/App_Data/person.xsl">
    </asp:XmlDataSource>
    
    
    
    DataSetクラスのReadXmlSchema()とReadXml()を使ってxmlファイルを読み込んで見てみると、ちゃんとスキーマで指定した制約が効いているようです。
    
    ということで、
    
    > どうやら、xslで変換後のxmlに対してもスキーマの定義が効いてるようで、スキーマで定義した形式以外のxmlにしようとしていることからエラーがでてるようです。
    
    については、完全に私の勘違いです。
    xmlやxmlsnなどについて、私にはもう少し勉強が必要そうですorz
    xmlファイルにxmlsnを追加したらなぜエラーが発生するのか、そしてxmlファイルにxmlsnを指定した場合にはxlsにはどのように指定しなければいけないのか、という疑問については、また何かわかれば投稿しようと思いますが、とりあえずは解決済みにしておきます。
    
    
記事No.20104 のレス / END /過去ログ39より / 関連記事表示
削除チェック/

■20103  リソースファイル(.resx)について
□投稿者/ 純@WAS -(2008/06/05(Thu) 17:45:45)

    分類:[ASP.NET (C#)] 

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

    ------環境------
    Windows XP
    Visual Studio 2005
    ASP.NET (C#)
    ----------------

    リソースファイル(.resx)で例えば1234_HOGEHOGEという名前を登録すると、
    「リソース名 '1234_HOGEHOGE'は有効な識別子ではありません」
    という警告が出ます。

    HOGEHOGEで登録すると警告は消えるのですが、
    案件の関係上、「管理番号_任意」という風な決まりがあるため、
    変更することはできません。

    実際ビルドは正常に通り、ページロード、ボタンクリック、オートポストバックの全てで検証を行い、
    エラーが発生する、ダウンするといった現象は発生していませんが、
    警告が表示されているのは非常に怖いものがあります(警告の内容が懸念へといざないます)。

    「管理番号_任意」といったネーミングルールを崩さず、
    警告を消す方法があれば是非ご教示下さい。

親記事 /過去ログ39より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 >>

ヒット件数が多いので過去ログ1〜76 までの検索結果 / 過去ログ77からさらに検索→

パスワード/

- Child Tree -