我有一个需要在SQL Server数据库表中保留的对象列表,其中每个对象都被保存为单个记录。即对象列表导致插入多个记录。
保存对象的简单方法是遍历列表并触发查询/存储过程/等。用于保存该记录。但这会导致多个数据库交互。
有没有办法在较少数量的数据库交互中保留对象列表?
答案 0 :(得分:2)
答案 1 :(得分:1)
您使用的是SQL Server 2008吗?您可以使用table-valued parameters将值集合(行)传递给单个参数中的命令。
答案 2 :(得分:0)
即使不这样做,您也可以将多个SQL staatements放入一个调用(即批处理)。没有什么可以阻止你使用30-60 opr甚至更普通的INSERT语句并立即将它们提交给SQL Server。 SQL字符串可能很大 - 您可以在其中一个语句中包含多个语句。
这里的诀窍是通过往返减少延迟。即呼叫/等待答案对。表值参数以及“批处理”都这样做。
答案 3 :(得分:0)
我以前做过的,如果对象是可序列化的,并且你的sql server是2005或更高版本,则使用xml Serializable,然后将对象保存在xml字段中。如果你想将对象分解为单个记录,那么你仍然可以传入xml并使用xml来查询
例如
DECLARE @X XML
SET @X ='<ListOfEmployees>
<Employee ID="5">
<Name>Mike</Name>
<Salary>67000</Salary>
</Employee>
<Employee ID="6">
<Name>Bob</Name>
<Salary>40000</Salary>
</Employee>
</ListOfEmployees>'
SELECT
T.c.value('Name[1]', 'varchar(50)'), -- The [1] tells Sql get the first Node Name under the ListOfEmployees/Employee mandatory
T.c.value('Salary[1]','money'),
T.c.value('@ID','int')
FROM @X.nodes('ListOfEmployees/Employee') T(c)
函数节点和值区分大小写
将对象转换为xml
XmlSerializer x = new XmlSerializer(classObject.GetType());
MemoryStream stream = new MemoryStream();
x.Serialize(stream, classObject);
return Encoding.ASCII.GetString(stream.ToArray());
所有列表实际上将被翻译为&lt; ArrayOf {ClassName}&gt;所有其他变量都是属性名称