一个 索引超出数组的界限 的问题。欢迎高手!

浪子-无悔 2009-02-16 09:57:25
以下是小弟的一个插入功能
其中GetCode(3)为产生的随即代码。
Txtnum.Text.ToString 为小弟在页面上输入的数字。对插入多少行进行输入。
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.AppSettings["MyConn"];
try
{
con.Open();
string sql = "";
for (int k = 0; k < Convert.ToInt32(Txtnum.Text.ToString()); k++)
{
sql += "INSERT INTO PC (Pcode,Usefuldata,State,Start_date,End_date) VALUES('" + GetCode(3) + "', '" + DropDownList3.SelectedValue + "','未使用','" + DateTime.Now + "','" + DateTime.Now.AddMonths(Convert.ToInt32(DropDownList3.SelectedValue))+ "')";

}
SqlCommand com = new SqlCommand(sql, con);
com.ExecuteNonQuery();

}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally { con.Close(); }

但是有时报 索引超出数组的界限 我真的找不到了,特来求助。
就在FOR循环和SQL赋值的位置。。
小弟先谢谢各位前辈了。。
...全文
316 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪子-无悔 2009-02-16
  • 打赏
  • 举报
回复
谢谢各位的帮忙,虽然我的第二个问题还没解决,但是我提出的问题总算是找到了,真是太大意了。在此谢谢CSDN的各位前辈,小弟会慢慢努力向你们学习的!
浪子-无悔 2009-02-16
  • 打赏
  • 举报
回复
谢谢楼上的指点,但是还是出现随即数一样的问题啊。。还望继续。。
steal8275756 2009-02-16
  • 打赏
  • 举报
回复
Random random = new Random(unchecked((int)DateTime.Now.Ticks));
浪子-无悔 2009-02-16
  • 打赏
  • 举报
回复
楼上的兄弟可以指点一,二吗?我是新手还望指教。。
liujiayu10 2009-02-16
  • 打赏
  • 举报
回复
经常获得的值是一样的


那是因为CPU时钟在太近的两个时间产生的随机数是一样的所导致的
浪子-无悔 2009-02-16
  • 打赏
  • 举报
回复
谢谢4楼的高手,这个问题解决了,但是还有个小新问题。就是我的GetCode 这个方法。怎么经常获得的值是一样的啊?可以再指点下吗?谢谢
沅江汐水 2009-02-16
  • 打赏
  • 举报
回复
楼上高手
steal8275756 2009-02-16
  • 打赏
  • 举报
回复
 int t = rand.Next(61); 
if (temp == t)
{
return GetCode(codeCount);
}
temp = t;
code += allCharArray[t];


你这个allCharArray最多含有26*2=52个子集,你从0-61里取随机数,这个数大于51的时候都会报错告诉你超出界限的
浪子-无悔 2009-02-16
  • 打赏
  • 举报
回复
谢谢楼上的建议。我加了断点调试了。但是报错的时候也就在FOR循环下面SQL赋值的时候突然就报异常错误了。
我在把GETCODE 代码帖出来方便你们查看。谢谢了,顺便我在这里也加断点测试测试。。
private string GetCode(int codeCount) // 获得混合验证码
{
string allChar = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z,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";
string[] allCharArray = allChar.Split(',');
string code = "";
int temp = -1;
Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(61);
if (temp == t)
{
return GetCode(codeCount);
}
temp = t;
code += allCharArray[t];
}
return code;
}
cppfaq 2009-02-16
  • 打赏
  • 举报
回复
GetCode比较可疑
在异常里面加断点,查看call stack
真相重于对错 2009-02-16
  • 打赏
  • 举报
回复
加断点,调试

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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