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