我的数据库中有一个存储过程,我将使用以下代码进行操作。我将一个参数传递给这个存储过程,当返回数据并在while循环中读取时,我得到的输入字符串格式不正确,即使我将一个值硬编码到查询参数中。
var response = DataAccessBridge.IADODao.CommandWrapperSelect<List<FeaturePack>>(command =>
{
var result = new List<FeaturePack>();
const string storedProc = "dbo.usp_PSTN_GetFeaturePacks";
// Add the input parameter and set its properties.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@FeaturePack";
parameter.SqlDbType = SqlDbType.Int;
parameter.Direction = ParameterDirection.Input;
parameter.Value = featurePackId;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(parameter);
command.CommandText = storedProc;
var dataReader = command.ExecuteReader();
while (dataReader.Read())
{
result.Add(new FeaturePack
{
FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()),
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()),
Description = dataReader["Description"].ToString(),
AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()),
});
}
return result;
});
上面是执行存储过程并添加参数的代码,在while循环中我收到此异常。任何人都可以给我任何线索,为什么抛出这个?
featurePackId
参数在此示例中被硬编码为1,我仍然收到此错误。
答案 0 :(得分:0)
虽然你没有告诉我们,但你几乎肯定会在以下某条线上获得例外:
FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()),
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()),
AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()),
,这是因为其中一行的值无法转换为整数。您应该调试代码以找到它失败的行,并查看列featurePack
,featureId
和alwaysOn
的值对于失败的行。其中一个不是整数值。