Я просто пытаюсь вызвать процедуру хранения (SQL Server 2008) с помощью C# и передать XMLDocument параметру процедуры хранения, который принимает тип данных SqlDbType.Xml. Я получаю ошибку: Не удалось преобразовать значение параметра из XmlDocument в String. Ниже приведен пример кода. Как передать XML-документ в процедуру хранилища, которая ожидает тип данных XML? Благодарю.Вызов хранимой процедуры с 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();
Спасибо. Я заработал. Добавлено следующее кодированное: StringWriter sw = new StringWriter(); XmlTextWriter xw = новый XmlTextWriter (sw); doc.WriteTo (xw); StringReader transactionXml = new StringReader (sw.ToString()); XmlTextReader xmlReader = новый XmlTextReader (transactionXml); SqlXml sqlXml = новый SqlXml (xmlReader); Преобразование его в строку было недостаточно. Я получил следующую ошибку: XML-синтаксический анализ: строка 1, символ 38, неспособная переключить кодировку ». Итак, я преобразовал в строку, затем спрятал ее в SqlXml, и она сработала. – Lakeshore
Вы можете использовать более простой подход: 'cmd.Parameters [" @ FileContent "]. Value = new SqlXml (File.OpenRead (" file.xml "));' –