输入字符串格式不正确c#

时间:2014-07-22 15:00:35

标签: c# sql .net sql-server

我的数据库中有一个存储过程,我将使用以下代码进行操作。我将一个参数传递给这个存储过程,当返回数据并在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,我仍然收到此错误。

1 个答案:

答案 0 :(得分:0)

虽然你没有告诉我们,但你几乎肯定会在以下某条线上获得例外:

FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()),
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()),

AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()),

,这是因为其中一行的值无法转换为整数。您应该调试代码以找到它失败的行,并查看列featurePackfeatureIdalwaysOn的值对于失败的行。其中一个不是整数值。