2017-01-18 10 views
0

XML解析を含むクエリを使用してテーブルの列をフィルタリングしようとしています。このクエリはC#で行われ、SQLDataAdapterを使用してクエリを実行しています。C#を使用してXMLに解析されたIlligal修飾名文字

string sqlstring = [email protected]"select * from [AS_GOV_PS_oud] inner join [AS_GOV_PStest13_1_2017v2] 
         on 
           [AS_GOV_PStest13_1_2017v2].[I/O name]  = 'ST' where 
cast('<a>' + replace([AS_GOV_PS_oud].Interconnection, '\""', ' </ a ><a> ') + ' </ a > ' as xml).query('for $x in/a order by $x return string($x)').value('/', 'varchar(max)') =        
cast('<a>' + replace([AS_GOV_PStest13_1_2017v2].Interconnection, '\""', ' </ a ><a> ') + ' </ a > ' as xml).query('for $x in/a order by $x return string($x)').value('/', 'varchar(max)') "; 

string cn = ConfigurationManager.ConnectionStrings["Scratchpad"].ConnectionString; 
using (SqlConnection myConnection = new SqlConnection(cn)) 
      { 
       SqlDataAdapter dataadapter = new SqlDataAdapter(sqlstring, myConnection); 
      } 

エラーコードは以下の通りです:私のコードは次のようである

型 'System.Data.SqlClient.SqlException' の未処理の例外が

をのSystem.Data.dllで発生した

追加情報:XML解析:行1、文字33、無効な修飾名文字

+0

使用SQL Server Management Studioを(SSMS) SQL Serverを使用してSQL文をC#で使用する前に取得します。 SSMSのエラーメッセージは、C#よりはるかに優れています。 – jdweng

+0

@jdweng、これはまったく同じことを言います。 'XML解析:行1、文字33、不正修飾名文字' –

+0

変数置換後の実際の文字列を確認する必要があります。 – jdweng

答えて

1

コードは超醜いです!

これで、どのようにこれを行うべきか、ほぼすべてのルールを破ります。しかし、それにもかかわらず、あなたの質問には答えることができる:空白を間違った場所

でこれを試してみてください:

SELECT CAST('<a>test</a>' AS XML) --works 

SELECT CAST('< a>test</a>' AS XML) --exception due to the blank in '< a>' 

SELECT CAST('<a>test</ a>' AS XML) --exception due to the blank in '</ a>' 

私の提案:もう一度、全体のことを考えてみて...何が本当に達成しようとしていますか?このような構成を結合の条件として使用すると、非常に間違ったアプローチです...

サンプルデータを設定し、必要なものを記述し、期待される出力を提供する新しい方法を考え直してください。

置き、この質問へのリンクと - あなたがthese sugggestionsに従えば - が付属してSOの艦隊は中急ぐだろうし、このより良い解決策を見つけるのに役立ちます...

関連する問題