我有一個需要在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物業名稱