2015-05-05 7 views
-2

У меня есть эта хранимая процедура для восстановления данных из базы данных (динамический запрос). и я вызываю эту хранимую процедуру из C# codebehind, я передаю два параметра из C# в эту хранимую процедуру.Ошибка таймаута в хранимой процедуре в C#

alter procedure [dbo].[GetCompleteCPTDetails] 
    @Practice_Short_Name varchar(50), 
    @Uploaded_Date nvarchar(max) 
as 
begin 
DECLARE @CPTtablename nvarchar(300) 
DECLARE @vQuery NVARCHAR(max) 
DECLARE @upldate nvarchar(100) 
set @upldate = @Uploaded_Date 
set @CPTtablename ='ACER_CLAIMS_MASTER_DETAIL_Hist_'[email protected]_Short_Name 
SET @vQuery = 'select Practice_Short_Name,Service_Date_From,Carrier_Name, 
    Location_Description,Patient_Number,Patient_First_Name, 
    Patient_Last_Name,Voucher_Number,Procedure_Code,Service_Fees, 
    Service_Payments,Service_Adjustments,Acer_Status,Acer_Allowed_Amount 
    from ' [email protected]+' 
    where Uploaded_Date =''' + @upldate + ''' 
    order by acer_status asc, Service_Date_From desc, Patient_First_Name asc' 
EXEC (@vQuery) 

end 
GO 

, но когда я выполняю этот запрос, он дает мне ошибку TimeOut. но если я присваиваю значение моим параметрам в SP и Run SP из окон запроса, то он отображает правильные данные.

Может любой, пожалуйста, объясните мне, почему он дает ошибку таймаута, если я вызываю его из C# codebehind.

+1

Ну, для начала, сколько времени требуется для выполнения? Тайм-аут по умолчанию для 'SqlCommand' составляет 30 секунд, и я предполагаю, что вы используете его в' C# '; поэтому, если для выполнения этой процедуры требуется более 30 секунд, вы получите исключение CommandTimeout. –

+1

Остановить плохой код SQL, другие могут его скопировать. Ваш SP недостаточно эффективен и уязвим для атак SQL-инъекций. – Darek

+2

Попробуйте вызвать очень простую процедуру (например, SELECT TOP 1 * FROM SomeTable) - у вас все еще есть тайм-аут? Часто «проблема с таймаутом» на самом деле связана с плохой строкой соединения. –

ответ

-2

Решение этой проблемы может быть много, поскольку проблемные области могут быть разными в каждом случае.

Но наиболее распространенные:

  1. Проверить & увеличить SQLCommand тайм-аут в приложении
  2. Постарайся вызова этого SP асинхронно

Также я хотел бы знать, ваше приложение на той же машине, где БД находится?

+0

Большой счет не приведет к таймауту. Если он вернет первую запись перед таймаутом, тогда часы прекратятся. – Paparazzi

+0

Что делать, если SP выполняет сложные операции и время разговора, чтобы вернуть хотя бы одну запись? –

+0

Но это не ваш ответ. Вы сказали, что это время из-за количества возвращенных записей. – Paparazzi

0

Это довольно просто, где и порядок.
Если это просто массивный стол без индексов, которые должны быть быстрыми.
Есть ли указатель на Uploaded_Date и он не фрагментирован.
Также указатель на сортировку поможет.

Вы загружаете все в DataTable?
Если это так, попробуйте загрузить в DataReader.

Пробуйте верхнюю часть 1 и удаляйте заказ.
Если это не возвращается, у вас есть проблема с подключением, так как запрос не должен истекать.

Другое дело попробовать (без блокировки), чтобы увидеть, является ли это проблемой блокировки.

Почему @Uploaded_Date nvarchar (max)?
Это дата или нет?

+0

Я пробовал ваше решение, но все же он бросает TimeOut Error. –

+0

Динамический запрос Sql работает с C# или нет ..? –

Смежные вопросы