Nota: Non è stato possibile trovare questa domanda esatta in una ricerca. Ho trovato una domanda piuttosto simile qui su Stack Overflow, che mi ha portato alla soluzione. Sto postando la domanda e la soluzione in modo che la prossima persona con il problema possa trovare più facilmente la soluzione. Avrei fatto la domanda CommunityWiki se fosse ancora possibile - Non sto cercando un rappresentante da questo.System.InvalidCastException: Impossibile convertire il valore del parametro da XElement a una stringa
Sto cercando di utilizzare ADO.NET per chiamare una stored procedure di SQL Server 2005, che accetta un parametro di tipo Xml
:
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;
passo il XML come LINQ to XML oggetto XElement
var idList = new XElement(
"Persons",
from i in selectedPeople
select new XElement("id", i));
tardi
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
}
Questo non sulla linea ExecuteReader
ad eccezione:
System.InvalidCastException: Impossibile convertire il valore di parametro da un XElement in una stringa. ---> System.InvalidCastException: oggetto deve implementare IConvertible
Qual è il modo corretto per passare un XElement
a una stored procedure?
possibile duplicato del [C#/SQL -? Cosa c'è di sbagliato con SqlDbType.Xml nelle procedure] (http://stackoverflow.com/questions/574928/c-sql-whats-wrong-with-sqldbtype-xml -in-procedure) –
Non è un duplicato - è un'eccezione diversa. –
Che problema stai avendo? Hai provato qualcosa e non ha funzionato? – JsonStatham