System.IndexOutOfRangeException: 索引超出了数组界限

mengxiaoqi 2011-08-03 05:29:25
索引超出了数组界限。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。

源错误:


行 41: queryCode = queryCode.Replace("-","");
行 42:
行 43: string sqlcode = NewCompileCode.TransformSqlCode(queryCode);
行 44:
行 45:


源文件: c:\Documents and Settings\10\My Documents\Visual Studio 2010\WebSites\WebSite12\Default2.aspx.cs 行: 43

堆栈跟踪:


[IndexOutOfRangeException: 索引超出了数组界限。]
NewCompileCode.TransformSqlCode(String code) +242
Default2.submit_Click(Object sender, EventArgs e) in c:\Documents and Settings\10\My Documents\Visual Studio 2010\WebSites\WebSite12\Default2.aspx.cs:43
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +113
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5348




--------------------------------------------------------------------------------
...全文
6249 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengxiaoqi 2011-08-05
  • 打赏
  • 举报
回复
谢谢谢谢~
chongchonglovenet 2011-08-04
  • 打赏
  • 举报
回复
の…………真没办法,
哈哈
步骤一:在你要断点的地方按F9,然后设置要首次加载的页面,设为启动项目;
步骤二:在按F5,就可以调试了,哈哈…
哥哥写得清楚了吗?
mengxiaoqi 2011-08-04
  • 打赏
  • 举报
回复
姐姐 我我不会调啊
chongchonglovenet 2011-08-04
  • 打赏
  • 举报
回复
像这种问题太好解决了,.net有那么好的调试工具干嘛不用,就是索引出界了啊,就是数组实际长度没有你要取的索引罢了,要么就是过长,要么就是过短,楼主你自己试着调试进去看看不就知道了
mengxiaoqi 2011-08-04
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;

public class NewCompileCode
{


private static char[] table = new char[]
{ '0','1','2','3',
'4','5','6','7',
'8','9' };//,'A','B',
// 'C','D','E','F',
// 'G','H','I','J',
//'K','L','M','N',
// 'O','P','Q','R',
// 'S','T','U','V',
//'W','X','Y','Z'

private static int[] IntTable = new int[]{
16,7,20,21,
29,12,28,17,
1,15 };//,23,26,
// 5,18,31,10,
// 2,8,24,14,
// 32,27,3,9,
//19,13,30,6,
//22,11,4,25,
//0,33,34,35

public DataTable makeCode(int count)
{

DataTable table = new DataTable();
table.TableName = "Security_code";
DataColumn codeColumn = new DataColumn("code", typeof(string));
codeColumn.Unique = true;
table.Columns.Add(codeColumn);
DataColumn validColumn = new DataColumn("valid", typeof(Int16));
table.Columns.Add(validColumn);
for (int i = 0; i < count; i++)
{
DataRow newRow = table.NewRow();
newRow["code"] = newCode(count);
newRow["valid"] = 1;
table.Rows.Add(newRow);
}
return table;


}

private static int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}


/// 随机生成一个36进制的16位的字符

public string newCode(int countIndex)
{
StringBuilder sb = new StringBuilder();

Random rad = new Random(GetRandomSeed());

for (int i = 0; i < 16; i++)
{

sb.Append(table[IntTable[rad.Next(0, IntTable.Length)]]);
}

return huanwei(sb.ToString());

}


/// 将16个字符转换成数据库保存形式

public static string TransformSqlCode(string code)
{
code = Gueiwei(code);
char[] chars = code.ToCharArray();
StringBuilder sb = new StringBuilder();

for (int i =0; i < chars.Length; i++)
{
for (int j = 0; j < IntTable.Length; j++)
{
if (chars[i] == table[IntTable[j]])
{
sb.Append(table[j]);
break;
}
}
}


return sb.ToString();
}

/// 将数据库防伪码转换成查询形式

public static string SqlCodeTransformCode(string sqlCode)
{
char[] chars = sqlCode.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
for (int index = 0; index < table.Length; index++)
{
if (chars[i] == table[index])
{
sb.Append(table[IntTable[index]]);
}
}
}
return huanwei(sb.ToString());
}
/// <summary>
/// 打乱16个字符排序 并且返回
/// </summary>

private static string huanwei(string strB)
{

Char[] chars = strB.ToCharArray();
char[,] fenjie = new char[4, 4];
int r = 0;
int c = 0;
char[] buma = new char[4];
foreach (char ch in chars)
{
fenjie[r, c] = ch;
if (r == 0) buma[c] = ch;
c++;
if (c == 4)
{
c = 0;
r++;
}

}
StringBuilder sb = new StringBuilder();
r = 0;
for (int i = 0; i < 16; i++)
{
if (i < 4) { sb.Append(fenjie[r++, 0]); if (i == 3)sb.Append('-'); }
else if (i < 8) { sb.Append(fenjie[--r, 1]); if (i == 7)sb.Append('-'); }
else if (i < 12) { sb.Append(fenjie[r++, 2]); if (i == 11)sb.Append('-'); }
else if (i < 16) { sb.Append(fenjie[--r, 3]); }
}
return sb.ToString();
}

/// <summary>
/// 复原16字符的排序
/// </summary>
private static string Gueiwei(String str)
{
str = str.Replace("-", "");
char[] chars = str.ToCharArray();
StringBuilder sb = new StringBuilder();
int row1 = 0;
int row2 = 7;
int row3 = 8;
int row4 = 15;

for (int i = 0; i < 4; i++)
{
sb.Append(chars[row1++]);
sb.Append(chars[row2--]);
sb.Append(chars[row3++]);
sb.Append(chars[row4--]);

}

return sb.ToString();
}
}
mengxiaoqi 2011-08-04
  • 打赏
  • 举报
回复
.....怎么检查啊?....我刚学好多都不懂
格桑花 2011-08-04
  • 打赏
  • 举报
回复
你检查一下是不是数组中的值为空,
mengxiaoqi 2011-08-04
  • 打赏
  • 举报
回复
public static string TransformSqlCode(string code)
{
code = Gueiwei(code);
char[] chars = code.ToCharArray();
StringBuilder sb = new StringBuilder();

for (int i = 0; i < chars.Length; i++)
{
for (int j = 0; j < IntTable.Length; j++)
{
if (chars[i] == table[IntTable[j]])
{
sb.Append(table[j]);
break;
}
}
}


return sb.ToString();
}
/// 将数据库防伪码转换成查询形式

public static string SqlCodeTransformCode(string sqlCode)
{
char[] chars = sqlCode.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
for (int index = 0; index < table.Length; index++)
{
if (chars[i] == table[index])
{
sb.Append(table[IntTable[index]]);
}
}
}
return huanwei(sb.ToString());
}谢谢了要帮帮我啊
暖枫无敌 2011-08-03
  • 打赏
  • 举报
回复
string sqlcode = NewCompileCode.TransformSqlCode(queryCode);
中方法的代码有问题。
子夜__ 2011-08-03
  • 打赏
  • 举报
回复
string sqlcode = NewCompileCode.TransformSqlCode(queryCode);

把NewCompileCode.TransformSqlCode(queryCode);这个方法贴出来看看

62,239

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧