नोट: मुझे खोज में यह सटीक प्रश्न नहीं मिला। मुझे स्टैक ओवरफ्लो पर कुछ हद तक समान प्रश्न मिला, जिसने मुझे समाधान का नेतृत्व किया। मैं प्रश्न और समाधान पोस्ट कर रहा हूं ताकि समस्या वाला अगला व्यक्ति आसानी से समाधान ढूंढ सके। अगर मैं अभी भी संभव था तो मैं सवाल समुदायविकि बना सकता था - मैं इस से प्रतिनिधि की तलाश नहीं कर रहा हूं।System.InvalidCastException: XElement से पैरामीटर मान को स्ट्रिंग
मैं ADO.NET उपयोग करने के लिए एक SQL सर्वर 2005 संग्रहीत प्रक्रिया है जिससे 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;
मैं एक्सएमएल XElement ऑब्जेक्ट में एक LINQ के रूप में एक्सएमएल पारित
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
को पास करने का सही तरीका क्या है?
के संभावित डुप्लिकेट [सी #/एसक्यूएल - क्या प्रक्रियाओं में SqlDbType.Xml साथ कुछ गड़बड़ है] (http://stackoverflow.com/questions/574928/c-sql-whats-wrong-with-sqldbtype-xml प्रक्रियाओं में) –
डुप्लिकेट नहीं - यह एक अलग अपवाद है। –
आपको क्या समस्या है? क्या आपने कुछ कोशिश की और यह काम नहीं किया? – JsonStatham