Myt*_*ily 0 c# sql-server stored-procedures indexoutofrangeexception
这是我的数据访问层
public string GetMinISecPer(ISecuritySummmary iSecObj)
{
try
{
string miniSecPer = null;
SelectCommand cmd = new SelectCommand(SPConst.GetMinIsecPer);
cmd["@SubISUName"] = iSecObj.SubISUName;
using (DBDataReaderWrapper reader = cmd.Execute())
{
while (reader.Read())
{
double miniSecPercent = Convert.ToDouble(reader.String["testValue"]);
miniSecPer = Convert.ToString(miniSecPercent);
}
}
return miniSecPer;
}
catch (Exception e)
{
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的存储过程
ALTER PROCEDURE [dbo].[GetMinIsecPer]
@SubISUName varchar(max)
AS
BEGIN
DECLARE @MinIsecPer float;
DECLARE @testValue varchar(20);
set @testValue='value';
set @MinIsecPer=(select MIN(iSecComplPer) from ISecurityStatistics IST
left outer join Relationship R on R.Id=IST.RelationshipId
left outer join SubISU SI on SI.Id=R.SubISUId
where SI.SubISUName=@SubISUName and UploadedDate=(SELECT MAX(UploadedDate) FROM ISecurityStatistics))
set @testValue=(select cast(@MinIsecPer as varchar(20)))
select cast(@testValue as varchar(20))
SELECT
SQL_VARIANT_PROPERTY(@testValue, 'BaseType'),
SQL_VARIANT_PROPERTY(@testValue, 'Precision'),
SQL_VARIANT_PROPERTY(@testValue, 'Scale'),
SQL_VARIANT_PROPERTY(@testValue, 'MaxLength')
END
Run Code Online (Sandbox Code Playgroud)
我的 SP 的输出是
(No column name)
72
(No column name) (No column name) (No column name) (No column name)
varchar 0 0 20
Run Code Online (Sandbox Code Playgroud)
在这个 SP 中,我从表 ISecurityStatistics、subISU 和 Relationship 中获取 min% 是主表,用于获取作为参数传递给它的 subISUName。
但在 DataAccessLayer 中,我收到错误为“索引超出范围异常”
请帮我解决这个问题.. 提前致谢..
这是因为即使没有设置名称,您也试图通过名称访问该值。
使用:
reader[0].ToString()
Run Code Online (Sandbox Code Playgroud)
或者您可以命名该列:
select cast(@testValue as varchar(20)) As [testValue]
Run Code Online (Sandbox Code Playgroud)
然后调用您当前所做的事情。
| 归档时间: |
|
| 查看次数: |
4927 次 |
| 最近记录: |