指数数组的边界之外 。为什么? [英] index was outside the bounds of the array . why?

查看:117
本文介绍了指数数组的边界之外 。为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的id列中收到此错误,我该如何解决这个问题?请帮我。 t.y

  public  List< CategoriesRollup> CategBranch()
{
var categBranch = new 列表< CategoriesRollup>() ;
const string spName = categories_rollup_branchlist;
使用 var con = _connectionString.GetConnection())
使用 var cmd = new SqlCommand(spName,con ))
{
try
{
cmd.Parameters.Add( @ username,SqlDbType.VarChar).Value = UsersSession.Users.UserName;
cmd.Parameters.Add( @ terminal,SqlDbType.VarChar).Value = IpAddress.GetMyIpAddress();
cmd.Parameters.Add( @ type,SqlDbType.TinyInt).Value = 1 ;
cmd.CommandType = CommandType.StoredProcedure;
var rdr = cmd.ExecuteReader();

if (rdr.HasRows)
while (rdr。 Read())
categBranch.Add( new CategoriesRollup
{
Result = Convert.ToInt32(rdr [ result]),
PromoKey = Convert.ToInt32(rdr [ Id]),
分支= rdr [ Branch]。ToString(),
Combo = rdr [ Combo]。ToString(),
Category = rdr [ Category ]。ToString(),
Item = rdr [ 项目]。ToString()
});

cmd.Dispose();
}





从下面的评论中复制的其他信息

this是我的sp ..也许我忘了写这里写的东西

  CREATE   #promosPerBranch 

id INT IDENTITY 1 1 ),
PromoKey int

CREATE TABLE #wholebranch(
Id INT IDENTITY 1 1 ),
BranchLookupKey INT
Branch VARCHAR 50 ),
ComboPromoKey INT ,
Combo VARCHAR 60 ),
CategoryKey INT
类别 VARCHAR 50 ),
ItemCategoryKey INT
Item VARCHAR 60


INSERT INTO #promosPerBranch
SELECT promo_key AS ' PromoKey'
FROM dbo.branch_promos
WHERE branch_lookup_key = branch_lookup_key
SELECT @ countPromos = COUNT (*)来自 #promosPerBranch
SET @ startPromos = 1
WHILE @ startPromos < = @ countPromos
BEGIN
- SET @id =(SELECT id FROM #wholebranch WHERE Id =(SELECT id FROM #promosPerBranch WHERE id = id)
- SELECT @id = id FROM #wholebranch WHERE id = Id
SELECT @ branch_code = branch_code FROM dbo.branches WHERE lookup_key = @ promoKey
SELECT @ promoKey = promoKey FROM #promosPerBranch WHERE id = @ startPromos
SELECT @ categoryKeys = p.category_keys FROM dbo.promos p WHERE [ key ] = @promoKey
INSERT INTO #wholebranch
SELECT
- b。[key] AS'BranchKey ',
b.lookup_key AS ' BranchLookupKey
b.branch_code AS ' 分支'
p。[ key ] AS ' < span class =code-string> ComboPromoKey'

p.name AS ' Combo'
c。[ key ] AS ' CategoryKey'
c.name AS ' 类别'
i。 category_key AS ' ItemCategoryKey'
i.name AS ' 项目'

FROM 项目i
INNER JOIN dbo.branches b ON i.category_key = b.lookup_key
INNER JOIN dbo.categories c ON i.category_key = c。[ key ]
INNER 加入 dbo.promos p ON p。[ key ] = @ promoKey
WHERE category_key IN SELECT [ key ] FROM dbo.categories
WHERE [ key ] IN SELECT * FROM dbo.parse_comma_delimited_string( @ categoryKeys )))
SET @ startPromos = @ startPromos + 1
END

解决方案

可能是因为您的存储过程没有返回名为Id的列。



检查SP,(在SSMS中运行)并查看它返回的确切列。


我现在解决了这个问题。我创建了3个临时表然后选择它们。感谢我的朋友。



  SELECT  
b。 [ key ] AS ' PromoKey'
,b.branch_code AS ' 分支'
,p.name AS ' 组合'
,c.name AS ' 类别'
,i.name AS ' Item'
FROM 分支b
INNER JOIN branch_promos bp
< span class =code-keyword> ON bp.branch_lookup_key = b.lookup_key
INNER JOIN #TempPromosResult p
ON p.promo_key = bp.promo_key
INNER JOIN 类别c
ON c。[] = p.category_key
INNER JOIN 项目i
ON i.category_key = c。[ key ]
WHERE b.branch_code = b.branch_code
GROUP BY p.name
,b。[ key ]
,b.branch_code
,c.name
,i.name
ORDER BY b.branch_code


Im getting this error in my id column, how can i fixed this? please help me. t.y

public List<CategoriesRollup> CategBranch()
{
   var categBranch = new List<CategoriesRollup>();
   const string spName = "categories_rollup_branchlist";
   using (var con = _connectionString.GetConnection())
   using (var cmd = new SqlCommand(spName, con))
   {
      try
      {
         cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = UsersSession.Users.UserName;
         cmd.Parameters.Add("@terminal", SqlDbType.VarChar).Value = IpAddress.GetMyIpAddress();
         cmd.Parameters.Add("@type", SqlDbType.TinyInt).Value = 1;
         cmd.CommandType = CommandType.StoredProcedure;
         var rdr = cmd.ExecuteReader();

         if (rdr.HasRows)
            while (rdr.Read())
               categBranch.Add(new CategoriesRollup
                  {
                     Result = Convert.ToInt32(rdr["result"]),
                     PromoKey = Convert.ToInt32(rdr["Id"]),
                     Branch = rdr["Branch"].ToString(),
                     Combo = rdr["Combo"].ToString(),
                     Category = rdr["Category"].ToString(),
                     Item = rdr["Item"].ToString()
                  });

            cmd.Dispose();
      }



additional information copied from comment below
this is my sp.. maybe i forgot something to write here

CREATE TABLE #promosPerBranch
(
   id INT IDENTITY (1,1),
   PromoKey int
)
CREATE TABLE #wholebranch (
   Id INT IDENTITY (1,1),
   BranchLookupKey INT,
   Branch VARCHAR(50),
   ComboPromoKey INT,
   Combo VARCHAR(60),
   CategoryKey INT,
   Category VARCHAR(50),
   ItemCategoryKey INT,
   Item VARCHAR(60)
)

INSERT INTO #promosPerBranch
SELECT promo_key AS 'PromoKey' 
FROM dbo.branch_promos 
WHERE branch_lookup_key = branch_lookup_key
SELECT @countPromos = COUNT(*) from #promosPerBranch
SET @startPromos = 1
WHILE @startPromos <= @countPromos
BEGIN
   --SET @id = (SELECT id FROM #wholebranch WHERE Id = (SELECT id FROM #promosPerBranch WHERE id = id)
   --SELECT @id = id FROM #wholebranch WHERE id = Id
   SELECT @branch_code = branch_code FROM dbo.branches WHERE lookup_key = @promoKey
   SELECT @promoKey = promoKey FROM #promosPerBranch WHERE id = @startPromos
   SELECT @categoryKeys = p.category_keys FROM dbo.promos p WHERE [key] = @promoKey
   INSERT INTO #wholebranch
   SELECT  
      --b.[key] AS 'BranchKey',
      b.lookup_key AS 'BranchLookupKey',
      b.branch_code AS 'Branch',
      p.[key] AS 'ComboPromoKey',
      p.name AS 'Combo',
      c.[key] AS 'CategoryKey',
      c.name AS 'Category',
      i.category_key AS 'ItemCategoryKey',
      i.name AS 'Item'
		 
      FROM items i 
         INNER JOIN dbo.branches b ON i.category_key = b.lookup_key
         INNER JOIN dbo.categories c ON i.category_key = c.[key]  
         INNER JOIN dbo.promos p ON p.[key] = @promoKey
         WHERE category_key IN (SELECT [key] FROM dbo.categories
         WHERE [key] IN (SELECT * FROM dbo.parse_comma_delimited_string(@categoryKeys)))
   SET @startPromos = @startPromos + 1
END

解决方案

Probably, because your stored procedure is not returning a column called "Id".

Check the SP, (run it in SSMS) and see exactly what columns it returns.


I now solved this. I created 3 temp table then select them. Thanks to my friend.

SELECT
          b.[key] AS 'PromoKey'
          ,b.branch_code AS 'Branch'
          ,p.name AS 'Combo'
          ,c.name AS 'Category'
          ,i.name AS 'Item'
    FROM branches b
        INNER JOIN branch_promos bp
        ON bp.branch_lookup_key = b.lookup_key
            INNER JOIN #TempPromosResult p
            ON p.promo_key = bp.promo_key
                INNER JOIN categories c
                ON c.[key] = p.category_key
                    INNER JOIN items i
                    ON i.category_key = c.[key]
    WHERE b.branch_code = b.branch_code
    GROUP BY p.name
            ,b.[key]
            ,b.branch_code
            ,c.name
            ,i.name
    ORDER BY b.branch_code


这篇关于指数数组的边界之外 。为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆