J'essaie simplement d'appeler une procédure de stockage (SQL Server 2008) à l'aide de C# et de passer XMLDocument à un paramètre de procédure de magasin qui prend un type de données SqlDbType.Xml. J'obtiens l'erreur: Échec de convertir la valeur de paramètre d'un XmlDocument en chaîne. Voici un exemple de code. Comment passez-vous un document XML à une procédure de magasin qui attend un type de données XML? Merci.Appel d'une procédure stockée avec le type de données XML
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();
Merci. Je l'ai eu pour travailler. Ajouté le codé suivant: 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 = nouveau SqlXml (xmlReader); La conversion en chaîne n'était pas suffisante. J'ai l'erreur suivante: XML analyse: ligne 1, caractère 38, impossible de changer l'encodage ". Donc, j'ai converti en chaîne, puis l'a converti en SqlXml et cela a fonctionné. – Lakeshore
Vous pouvez adopter une approche plus simple: 'cmd.Parameters [" @ FileContent "]. Value = new SqlXml (File.OpenRead (" fichier.xml "))' –