我想总结一下Amount
列,但收到此错误消息
其他信息:索引超出了数组的范围。
以下是SQL数据库中Balance表的定义:
CREATE TABLE [dbo].[Balance]
(
[BalanceID] [int] IDENTITY(1,1) NOT NULL,
[Sn] [nvarchar](50) NULL,
[Description] [nvarchar](1000) NULL,
[Date] [date] NULL,
[Amount] [decimal](8, 0) NULL
)
以下是通过SQL内联
访问表的代码C#cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select sum(Amount) from Balance where Sn=@sn and Date Between @SD and @ED";
cmd.Parameters.Add(new SqlParameter("@sn", txtSn.Text));
cmd.Parameters.Add(new SqlParameter("@SD", DTPStart.Text));
cmd.Parameters.Add(new SqlParameter("@ED", DTPEnd.Text));
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Debt = reader.GetDecimal(4);
}
reader.Close();
cn.Close();
非常感谢任何帮助!
答案 0 :(得分:2)
方法GetDecimal获取作为方法调用的参数提供的具有从零开始的索引的列的值。
您只在查询Select sum(Amount) from Balance
中返回一列,但尝试在reader.GetDecimal(4)
中找到第五列
所以将代码更改为
Debt = reader.GetDecimal(0);
更新:正如评论中所述 - 在您的特定情况下,您根本不需要ExecuteReader
。由于您从服务器返回单个值 - 您可以使用ExecuteScalar代替执行查询,并返回查询返回的结果集中第一行的第一列。