Estoy intentando simplemente llamar a un procedimiento de tienda (SQL Server 2008) usando C# y pasando XMLDocument a un parámetro de procedimiento de tienda que toma un tipo de datos SqlDbType.Xml. Recibo un error: no se pudo convertir el valor del parámetro de XmlDocument a String. A continuación se muestra el código. ¿Cómo pasa un documento XML a un procedimiento de almacenamiento que espera un tipo de datos XML? Gracias.Llamar a un procedimiento almacenado con XML Datatype
XmlDocument doc = new XmlDocument();
//Load the the document with the last book node.
XmlTextReader reader = new XmlTextReader(@"C:\temp\" + uploadFileName);
reader.Read();
// load reader
doc.Load(reader);
connection.Open();
SqlCommand cmd = new SqlCommand("UploadXMLDoc", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Year", SqlDbType.Int);
cmd.Parameters["@Year"].Value = iYear;
cmd.Parameters.Add("@Quarter", SqlDbType.Int);
cmd.Parameters["@Quarter"].Value = iQuarter;
cmd.Parameters.Add("@CompanyID", SqlDbType.Int);
cmd.Parameters["@CompanyID"].Value = iOrganizationID;
cmd.Parameters.Add("@FileType", SqlDbType.VarChar);
cmd.Parameters["@FileType"].Value = "Replace";
cmd.Parameters.Add("@FileContent", SqlDbType.Xml);
cmd.Parameters["@FileContent"].Value = doc;
cmd.Parameters.Add("@FileName", SqlDbType.VarChar);
cmd.Parameters["@FileName"].Value = uploadFileName;
cmd.Parameters.Add("@Description", SqlDbType.VarChar);
cmd.Parameters["@Description"].Value = lblDocDesc.Text;
cmd.Parameters.Add("@Success", SqlDbType.Bit);
cmd.Parameters["@Success"].Value = false;
cmd.Parameters.Add("@AddBy", SqlDbType.VarChar);
cmd.Parameters["@AddBy"].Value = Page.User.Identity.Name;
cmd.ExecuteNonQuery();
connection.Close();
Gracias. Yo tengo que trabajar. Se agregó el siguiente código: StringWriter sw = new StringWriter(); XmlTextWriter xw = new XmlTextWriter (sw); doc.WriteTo (xw); StringReader transactionXml = new StringReader (sw.ToString()); XmlTextReader xmlReader = new XmlTextReader (transactionXml); SqlXml sqlXml = new SqlXml (xmlReader); Convertirlo en una cadena no fue suficiente. Obtuve el siguiente error: análisis XML: línea 1, carácter 38, no se puede cambiar la codificación ". Entonces, convertí a cadena y luego lo convertí en SqlXml y funcionó. – Lakeshore
Puede tomar un enfoque más simple: 'cmd.Parameters [" @ FileContent "]. Value = new SqlXml (File.OpenRead (" file.xml "));' –