我有一个需要在SQL Server数据库表中持久保存的对象列表,其中每个对象都被保存为单个记录。即对象列表导致插入多条记录。.NET |在最少数量的查询中保留多个对象
保存对象的简单方法是遍历列表并激发查询/存储过程等。为了保存该记录。但是这会导致多个数据库交互。
有没有办法在较少数量的数据库交互中保留对象列表?
我有一个需要在SQL Server数据库表中持久保存的对象列表,其中每个对象都被保存为单个记录。即对象列表导致插入多条记录。.NET |在最少数量的查询中保留多个对象
保存对象的简单方法是遍历列表并激发查询/存储过程等。为了保存该记录。但是这会导致多个数据库交互。
有没有办法在较少数量的数据库交互中保留对象列表?
您使用SQL Server 2008吗?您可以使用table-valued parameters将一组值(行)传递给单个参数中的命令。与多个XML(2005)或表
即使不这样做,您可以将多个SQL语句放入一个调用中(即批次)。没有什么能够阻止你使用30-60甚至更多的普通INSERT语句,并一次将它们提交给SQL Server。 SQL字符串可能很大 - 并且您可以在其中一个语句中使用多个语句。
这里的诀窍是通过往返来减少延迟。即呼叫/等待答案对。表值参数以及“批处理”都是这样做的。
过去我做了什么,如果对象是可序列化的,并且您的sql server是2005或更高版本,则使用xml Serializable,然后将该对象保存在xml字段中。如果你想打破对象分解成indivual记录,那么你还可以通过在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());
所有列表实际上将被翻译为< ArrayOf {}类名>所有其它变量将是个e物业名称