[英]Stored procedure executing but not able to access data in asp.net
我有一个在SQL Server中完美执行的存储过程。 但是我无法从数据访问层访问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
编辑:已经解决了问题,我提供了如何提供的问题
SP中的最后一个命令应该是SELECT
命令。 否则,您会得到其他结果,例如受影响的行数等。 Management Studio仍然能够显示从SP中的某个SELECT
创建的行,但实际上它们不是您针对该SP调用ADO.NET命令时返回的第一个“东西”。
在你之后
rdrval = command1.ExecuteReader();
你需要做类似的事情
while (rdrval.Read())
{
//do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.