Po prostu próbuję wywołać procedurę sklepu (SQL Server 2008) za pomocą C# i przekazanie XMLDocument do parametru procedury składowania, który pobiera typ danych SqlDbType.Xml. Otrzymuję błąd: Nie można przekonwertować wartości parametru z XmlDocument na ciąg. Poniżej znajduje się przykład kodu. W jaki sposób przekazujesz dokument XML do procedury sklepu, która oczekuje typu danych XML? Dzięki.Wywołanie procedury składowanej o typach danych 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();
Dzięki. Mam to do pracy. Dodano następujące kodowane: StringWriter sw = new StringWriter(); XmlTextWriter xw = nowy XmlTextWriter (sw); doc.WriteTo (xw); StringReader transactionXml = new StringReader (sw.ToString()); XmlTextReader xmlReader = nowy XmlTextReader (transactionXml); SqlXml sqlXml = new SqlXml (xmlReader); Konwersja na ciąg nie była wystarczająca. Pojawił się następujący błąd: parsowanie XML: wiersz 1, znak 38, nie można zmienić kodowania ". Więc przekonwertowałem na string, a następnie zakryłem go do SqlXml i działało. – Lakeshore
Możesz przyjąć prostsze podejście: 'cmd.Parameters [" @ FileContent "]. Value = new SqlXml (File.OpenRead (" file.xml "));' –