目前您的存儲過程大概做這樣的事情(我絕對在數據類型的猜測在這裏,和我假設你使用的是SQL Server 2008或更好的 - 請提問的時候指定版本!):
從應用程序
CREATE TYPE dbo.Collection AS TABLE
(
GetID INT,
GetTimeMark DATETIME,
UTCTimeMark DATETIME,
GetValue INT
);
GO
CREATE PROCEDURE dbo.pr_Collection_Store2
@Collection AS dbo.Collection READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.SomeTable(ID, TimeMark, UTCTimeMark, Value)
SELECT GetID, GetTimeMark, UTCTimeMark, GetValue
FROM @Collection AS c
WHERE NOT EXISTS (SELECT 1 FROM dbo.SomeTable WHERE ID = c.GetID);
END
GO
然後:
CREATE PROCEDURE dbo.pr_Collection_Store
@GetID INT,
@GetTimeMark DATETIME,
@UTCTimeMark DATETIME,
@GetValue INT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.SomeTable(ID, TimeMark, UTCTimeMark, Value)
SELECT @GetID, @GetTimeMark, @UTCTimeMark, @GetValue;
END
GO
你能做到這一點,而不是。對不起,我知道C#,希望你可以把它翻譯成VB.NET。
DataTable tvp = new DataTable();
tvp.Columns.Add(new DataColumn("i"));
foreach(var i in CollectionOutput)
{
tvp.Rows.Add(i.GetID, i.GetTIMEMARK, i.GetTIMEMARK.ToUniversalTime(), i.GetValue);
}
using (connection)
{
SqlCommand cmd = new SqlCommand("dbo.pr_Collection_Store2", connection);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@Collection", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
connection.Open();
cmd.ExecuteNonQuery();
}
顯示你的代碼。 – JohnFx 2012-04-22 21:29:34
是由相同數量的分鐘的移位在數據庫中的每一個值(例如,所有的源數據是由相同的時區,並且在該組的所有數據要麼根本不受日光節約時間,或受其影響的相同量的影響? – 2012-04-22 21:29:46
ToUniversalTime不是「慢」。你的數據庫訪問正在採取的大部分時間。 – usr 2012-04-22 21:37:32