C# 输入字符串的格式不正确#
我的数据库中有一个存储过程,我正在用下面的代码执行它。我将一个参数传递给这个存储过程,当返回数据并在while循环中读取时,我会得到一个格式不正确的输入字符串异常,即使我将一个值硬编码到查询参数中C# 输入字符串的格式不正确#,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,我的数据库中有一个存储过程,我正在用下面的代码执行它。我将一个参数传递给这个存储过程,当返回数据并在while循环中读取时,我会得到一个格式不正确的输入字符串异常,即使我将一个值硬编码到查询参数中 var response = DataAccessBridge.IADODao.CommandWrapperSelect<List<FeaturePack>>(command => { var result = new List&l
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;
});
在本例中,参数被硬编码为1,我仍然收到此错误。尽管您没有告诉我们,但您几乎肯定会在以下行中的一行中得到异常:
FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()),
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()),
AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()),
这是因为其中一行的值不能转换为整数。您应该调试代码以找到它失败的行,并查看失败行的列
featurePack
、featureId
和alwaysOn
的值。其中一个不是整数值。过程为featurePack
返回的数据类型是什么,以及过程中为参数指定的类型是什么。可能您正在返回null
,请使用DBNull.Value检查异常发生在哪一行?当您单步执行代码时,您看到字符串的值是什么?如果您调试该while循环,您将能够看到导致问题的值,并且应该从中明确问题的原因。或设置为在引发异常时中断:。我们无法猜测返回的数据是什么,但您可以看到它。@TimSchmelter好的,我在查看后删除了,我不知道我的“子问题”是否有意义(它开始对我没有意义,我问了它xD)-现在您的回答没有意义(有意义,但没有上下文,所以似乎是随机的),因为我的问题不存在了-doh!对不起,谢谢你的回复
FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()),
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()),
AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()),