注:この正確な質問は検索では見つかりませんでした。 Stack Overflowでこれとやや似たような質問があることがわかりました。私は問題と次の人が解決策をより簡単に見つけることができるように質問とソリューションを投稿しています。それがまだ可能だったのであれば、私はCommunityWikiに質問をしたでしょう - 私はこれから担当者を探していません。System.InvalidCastException:パラメータ値をXElementからStringに変換できません
私はXml
型のパラメータを受け入れるSQL Server 2005のストアドプロシージャを呼び出すためにADO.NETを使用しようとしています:
CREATE PROCEDURE dbo.SomeProcedure(
@ListOfIds Xml)
AS
BEGIN
DECLARE
@Ids TABLE(ID Int);
INSERT INTO @Ids
SELECT ParamValues.ID.value('.', 'Int')
FROM @ListOfIds.nodes('/Persons/id') AS ParamValues(ID);
SELECT p.Id,
p.FirstName,
p.LastName
FROM Persons AS p
INNER JOIN @Ids AS i ON p.Id = i.ID;
END;
私はLINQ XMLのXElementにオブジェクトとしてXMLを渡します
var idList = new XElement(
"Persons",
from i in selectedPeople
select new XElement("id", i));
後で
SqlCommand cmd = new SqlCommand
{
Connection = conn,
CommandText = "dbo.SomeProcedure",
CommandType = CommandType.StoredProcedure
};
cmd.Parameters.Add(
new SqlParameter
{
ParameterName = "@ListOfIds",
SqlDbType = SqlDbType.Xml,
Value = idList)
});
using (var reader = cmd.ExecuteReader())
{
// process each row
}
これは例外とExecuteReader
行に失敗します。
System.InvalidCastExceptionのは:文字列へのXElementからパラメータ値を変換に失敗しました。 ---> System.InvalidCastException:オブジェクトはIConvertibleを実装する必要があります
XElement
をストアドプロシージャに渡す正しい方法は何ですか?
の可能重複[C#の/ SQLに - の手順でSqlDbType.Xmlと何が問題なのですか?](http://stackoverflow.com/questions/574928/c-sql-whats-wrong-with-sqldbtype-xml -in-procedures) –
重複ではなく、別の例外です。 –
あなたはどんな問題を抱えていますか?あなたは何かを試してもうまくいかなかったのですか? – JsonStatham