指数数组的边界之外 。为什么? [英] index was outside the bounds of the array . why?
本文介绍了指数数组的边界之外 。为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在我的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屋!
查看全文