2012-11-09 1 views
0

У меня есть хранимая процедура, которая отлично работает на SQL Server. Однако я не могу получить доступ к строк, которые возвращение его в asp.net от доступа к данным слояВыполнение хранимой процедуры, но не доступ к данным в asp.net

Мой DataAccessLayer код выглядит следующим образом:

public List<AdvancePaymentRep> getPaymentAdvanceData(int? InternalCompany = 0, string Currency = "", DateTime? InvoiceDateFrom = null, DateTime? InvoiceDateTo = null, DateTime? AdvDateDueFrom = null, DateTime? AdvDateDueTo = null) 
    { 
     CreateConnectionString(); 
     List<AdvancePaymentRep> paymentAdvanceCollection = new List<AdvancePaymentRep>(); 
     SqlDataReader rdrval = null; 
     SqlCommand command1 = sqlConnection.CreateCommand(); 
     command1.CommandType = System.Data.CommandType.StoredProcedure; 
     command1.CommandText = "[dbo].[NST_GetDataForAdvancePaymentReport]"; 

     if (InternalCompany != 0) 
     { 

     SqlParameter parametersInternalCompany = new SqlParameter(); 
     parametersInternalCompany.ParameterName = "@AlhInternalCie"; 
     parametersInternalCompany.SqlDbType = System.Data.SqlDbType.Int; 
     parametersInternalCompany.Direction = ParameterDirection.Input; 
     parametersInternalCompany.Value = InternalCompany; 
     command1.Parameters.Add(parametersInternalCompany); 
     } 

     SqlParameter parametersCurrency = new SqlParameter(); 
     parametersCurrency.ParameterName = "@AlhCurrency"; 
     parametersCurrency.SqlDbType = System.Data.SqlDbType.NVarChar; 
     parametersCurrency.Direction = ParameterDirection.Input; 
     parametersCurrency.Value = Currency; 
     command1.Parameters.Add(parametersCurrency); 

     if (InvoiceDateFrom != Convert.ToDateTime("01/01/0001 00:00:00")) 
     { 

     SqlParameter parametersInvoiceDateFrom = new SqlParameter(); 
     parametersInvoiceDateFrom.ParameterName = "@AldDtCreatedFrom"; 
     parametersInvoiceDateFrom.SqlDbType = System.Data.SqlDbType.Date; 
     parametersInvoiceDateFrom.Direction = ParameterDirection.Input; 
     parametersInvoiceDateFrom.Value = InvoiceDateFrom; 
     command1.Parameters.Add(parametersInvoiceDateFrom); 
     } 

     if (InvoiceDateTo != Convert.ToDateTime("01/01/0001 00:00:00")) 
     { 
     SqlParameter parametersInvoiceDateTo = new SqlParameter(); 
     parametersInvoiceDateTo.ParameterName = "@AldDtCreatedTo"; 
     parametersInvoiceDateTo.SqlDbType = System.Data.SqlDbType.Date; 
     parametersInvoiceDateTo.Direction = ParameterDirection.Input; 
     parametersInvoiceDateTo.Value = InvoiceDateTo; 
     command1.Parameters.Add(parametersInvoiceDateTo); 

     } 

     if (AdvDateDueFrom != Convert.ToDateTime("01/01/0001 00:00:00")) 
     { 
     SqlParameter parametersInvoiceDateDueFrom = new SqlParameter(); 
     parametersInvoiceDateDueFrom.ParameterName = "@InvhDtDueFrom"; 
     parametersInvoiceDateDueFrom.SqlDbType = System.Data.SqlDbType.Date; 
     parametersInvoiceDateDueFrom.Direction = ParameterDirection.Input; 
     parametersInvoiceDateDueFrom.Value = AdvDateDueFrom; 
     command1.Parameters.Add(parametersInvoiceDateDueFrom); 
     } 


     if (AdvDateDueTo != Convert.ToDateTime("01/01/0001 00:00:00")) 
     { 
     SqlParameter parametersInvoiceDateDueTo = new SqlParameter(); 
     parametersInvoiceDateDueTo.ParameterName = "@InvhDtDueTo"; 
     parametersInvoiceDateDueTo.SqlDbType = System.Data.SqlDbType.Date; 
     parametersInvoiceDateDueTo.Direction = ParameterDirection.Input; 
     parametersInvoiceDateDueTo.Value = AdvDateDueTo; 
     command1.Parameters.Add(parametersInvoiceDateDueTo); 
     } 

     try 
     { 
     if (sqlConnection == null) 
     { 
      sqlConnection.Open(); 
     } 
     rdrval = command1.ExecuteReader(); // Getting HasRows = false out here 

EDIT: Были ли решена проблема была какая-то проблема с тем, как я поставил

+0

вы можете вставить СП и выход здесь? что поможет в ответе на вопрос. –

ответ

2

Последняя команда в вашем SP должна быть командой SELECT. Кроме того, вы получаете другие результаты, такие как количество затронутых строк и т. Д. Management Studio все еще может отображать строки, созданные из одного из SELECT s в вашем пакете SP, но на самом деле они не являются первой «вещью», которая возвращается, когда вы вызываете команду ADO.NET против этого SP.

0

После кода вашего

rdrval = command1.ExecuteReader(); 

Вам нужно сделать что-то вроде

while (rdrval.Read()) 
{ 
    //do something 
} 
+1

Я согласен, что это необходимо, но в нижней части его кода он говорит HasRows = false. – Hardrada

+0

очень правдоподобно - @Ofer, скорее всего, прав ... что-то отключено с хранимой процедурой. – ethorn10