Я пишу две таблицы на SQL-сервере по строкам из С#.
Приложение My С# передает параметры в 2 хранимые процедуры, каждая из которых вставляет строки в таблицы.
Каждый раз, когда я вызываю хранимую процедуру, я открываю и закрываю соединение.
Мне нужно записать около 100 м строк в базу данных.
Должен ли я закрывать и открывать соединение каждый раз, когда я вызываю хранимую процедуру?
Вот пример того, что я делаю:
public static void Insert_TestResults(TestResults testresults)
{
try
{
DbConnection cn = GetConnection2();
cn.Open();
// stored procedure
DbCommand cmd = GetStoredProcCommand(cn, "Insert_TestResults");
DbParameter param;
param = CreateInParameter("TestName", DbType.String);
param.Value = testresults.TestName;
cmd.Parameters.Add(param);
if (testresults.Result != -9999999999M)
{
param = CreateInParameter("Result", DbType.Decimal);
param.Value = testresults.Result;
cmd.Parameters.Add(param);
}
param = CreateInParameter("NonNumericResult", DbType.String);
param.Value = testresults.NonNumericResult;
cmd.Parameters.Add(param);
param = CreateInParameter("QuickLabDumpID", DbType.Int32);
param.Value = testresults.QuickLabDumpID;
cmd.Parameters.Add(param);
// execute
cmd.ExecuteNonQuery();
if (cn.State == ConnectionState.Open)
cn.Close();
}
catch (Exception e)
{
throw e;
}
}
Вот хранимая процедура на сервере:
USE [SalesDWH]
GO
/****** Object: StoredProcedure [dbo].[Insert_TestResults] Script Date: 12/26/2011 10:45:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Insert_TestResults]
-- Add the parameters for the stored procedure here
@TestName varchar (500),
@Result decimal (18,4)=null,
@NonNumericResult varchar (50)=null,
@QuickLabDumpid int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO [SalesDWH].[dbo].[TestResults]
([TestName]
,[Result]
,nonnumericresult
,[QuickLabDumpid])
VALUES
(@TestName,@Result,@nonnumericresult,@QuickLabDumpID)
END
Для примерно 100 м строк это займет 3 дня. Это кажется мне слишком медленным. Что я могу сделать, чтобы ускорить это? Каковы стандарты по открытию/закрытию соединения столько раз?