Search code examples
c#.netxmloracle-databasexmltype

Error on value assignment - Value does not fall within the expected range


I am trying to assign value to an oracle parameter before sending it to database but this one particular XMLTYPE is throwing
System.ArgumentException: 'Value does not fall within the expected range.'

I tried various suggestions but most of them involve restarting laptop or visual studio settings etc, I feel this has something to do with the XMLType to XDocument. However, a similar code works in another solution.

My C# Code looks like below:

public static string SaveMyData(int myId, XDocument myData)
        {            
            try
            {
                OracleParameter[] parameters = new OracleParameter[3];
                parameters[0] = new OracleParameter() 
                {
                    ParameterName = "P_ID",
                    Value = myId,
                    OracleDbType = OracleDbType.Int16,
                    Direction = ParameterDirection.Input
                };             

                parameters[1] = new OracleParameter()
                {
                    ParameterName = "P_DATA",
                    Value = myData,
                    OracleDbType = OracleDbType.XmlType,
                    Direction = ParameterDirection.Input
                };

                parameters[2] = new OracleParameter()
                {
                    ParameterName = "P_RESULT",
                    OracleDbType = OracleDbType.Varchar2,
                    Direction = ParameterDirection.Output
                };

                string myresult = DataAccess.DataContext.GetInstance().Data.ExecuteProcWithParameter(UPDATE_MY_DATA, parameters)["P_RESULT"].ToString();

                return myresult;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

The value of myData is :

<players>
  <player>
    <id>10101</id>
    <name>Ricardo Ferreira Rodrigues</name>
    <shirtnumber>1</shirtnumber>
    <position>Guarda Redes</position>
    <realteam>5</realteam>
  </player>
  <player>
    <id>10103</id>
    <name>Antonio Manuel</name>
    <shirtnumber>2</shirtnumber>
    <position>Defesa</position>
    <realteam>5</realteam>
  </player>
</players>

I even tried changing the myData to XmlDocument but that as well doesn't work. Any idea on what might be going wrong ?


Solution

  • You need an instance of OracleXmlType instead of the XDocument and pass the XML as a string argument (mydata.ToString())