SqlDataReader.ExecuteReader();即使提供了所有参数,也返回null对象


SqlConnection connection = Connect();
SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = sprocName;
command.Connection = connection;
//loop through the dictionary
foreach (string key in paramList.Keys)
{
command.Parameters.AddWithValue(key, paramList[key]);
}
SqlDataReader dataReader = command.ExecuteReader();

我正在尝试从数据库中读取数据,当我传递相同的参数并执行SP时,我会得到正确的结果。但是这里的SqlDataReader dataReader = command.ExecuteReader();当我检查(dataReader.HasRows)时,它返回false!

键是否包含"@",例如,如果键参数名称EmployeeId则需要添加以下参数

commnad.Parameters.AddWithValue('@EmployeeId', 1);

Exec up_GetAtt@pageNumber=1,@pagesize=10,@PID=1000,@DeID=NULL,@DeName=NULL,@SortByColumn='ReleaseDate',@SortOrder='DESC'这是我通过的参数

您需要将C#null值转换为DBNull

SqlConnection connection = Connect();
SqlCommand command = new SqlCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = sprocName;
command.Connection = connection;
//loop through the dictionary
foreach (string key in paramList.Keys)
{
command.Parameters.AddWithValue(key, paramList[key] == NULL? DBNull.Value : paramList[key]);
}
SqlDataReader dataReader = command.ExecuteReader();

鉴于缺乏信息来帮助你更好,也检查的常见错误

  • 进程和参数名称中的类型
  • 使用CommandType.StoredProcedure:sprocName值发送查询时必须仅为"up_GetAtt",这是包含EXEC字或参数的常见错误
  • 检查值类型,你的paramList应该是一个字典,并且你放在该列表中的项的值类型应该与sql等效类型匹配,不是所有类型都有隐式转换
  • 检查paramList项的可为Null性,使用可为Null的int和datetime
  • 检查参数名称是否以开头@
  • 省略参数并不意味着它为null,除非存储过程定义将其默认为null
  • 在过程定义中省略没有默认值的参数
  • 不必要的值引号,您发送的是参数值,它不是concat

相关内容

  • 没有找到相关文章

最新更新