Я хочу передать параметр типа XML параметру в TVP. Я попробовал приведенный ниже код, который не работает. Я не могу выяснить, есть ли способ передать данные xml в TVP на сервере sql.
sql
CREATE TABLE XmlSample(Id INT, Profile XML);
CREATE TYPE [SampleProfile_DataTYPE] AS TABLE
(
Id INT,
Profile XML
);
CREATE PROCEDURE XmlTvpSprocTest_Save
@SamplesTvp [SampleProfile_DataTYPE] READONLY
AS
BEGIN
INSERT INTO XmlSample (Id, Profile)
SELECT DeviceID, Profile
FROM @SamplesTvp
END
Код соответствующей стороны в C#
public void SaveXmlTestData()
{
string xdata = @"<?xml version=""1.0"" encoding=""ISO - 8859 - 1""?><note><to>Rahul</to></note>";
var samples= GetSamplesTvp(1, 1, XElement.Parse(xdata));
using (DbCommand cmd = database.GetStoredProcCommand("XmlTvpSprocTest_Save"))
{
var param = new SqlParameter("@SamplesTvp ", samples) { SqlDbType = SqlDbType.Structured };
cmd.Parameters.Add(param);
database.ExecuteNonQuery(cmd);
}
}
private DataTable GetSamplesTvp(int deviceId, XmlDocument xmldata)
{
var table= new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Profile", typeof(XElement));
table.Rows.Add(deviceId, xmldata);
return table;
}
Я получаю исключение Тип столбца не поддерживается . Параметр xml должен быть включен в TVP (профиль) вместе с другими параметрами. отчасти причина в том, что мне придется сохранить список xml профилей вместе с соответствующими идентификаторами, кто-нибудь сталкивался с чем-то подобным?