急,在线等:System.IndexOutOfRangeException: 索引超出了数组界限
公共类的代码:
//定义完成注册相关常量表示字段名称或SQL语句。
private const string SQL_UPDATE_USERPASS = "dbo.proUpdateUserpass";
private const string PARM_USERPASS_NAME = "@username";
private const string PARM_USERPASS_PASS = "@userpass";
/// <summary>
/// 更新用户密码
/// </summary>
/// <param name="username">用户名称</param>
/// <param name="userpass">用户密码</param>
public static bool UpdateUserpass(string username, string userpass)
{
StringBuilder strSQL = new StringBuilder();
//获取缓存参数,如果没有,此方法会自动创建缓存列表
SqlParameter[] passParms = GetParameters();
//创建执行语句的SQL命令
SqlCommand cmd = new SqlCommand();
//依次给参数赋值
passParms[0].Value = username;
passParms[1].Value = userpass;
//遍历所有参数,并将参数添加到SqlCommand命令中
foreach (SqlParameter parmPass in passParms)
cmd.Parameters.Add(parmPass);
//获取数据库的连接字符串
using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))
{
//打开数据库连接,执行命令
conn.Open();
//设置Sqlcommand命令的属性
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.proUpdateUserpass";
//执行添加的SqlCommand命令
int val = cmd.ExecuteNonQuery();
//清空SqlCommand命令中的参数
cmd.Parameters.Clear();
//关闭数据库连接
conn.Close();
//判断添加是否成功
if (val > 0)
{
return false;
}
else
{
return true;
}
}
}
private static SqlParameter[] GetParameters()
{
SqlParameter[] parmsPass = SqlHelper.GetCachedParameters(SQL_UPDATE_USERPASS);
//首先用户密码判断缓存是否已经存在
if (parmsPass == null)
{
//缓存不存在的情况下,新建参数列表
parmsPass = new SqlParameter[]{
new SqlParameter(PARM_USERPASS_NAME, SqlDbType.NVarChar, 50),
new SqlParameter(PARM_USERPASS_PASS, SqlDbType.NVarChar, 128)};
//将新建的参数列表添加到哈希表中缓存起来
SqlHelper.CacheParameters(SQL_UPDATE_USERPASS, parmsPass);
}
//返回参数数组
return parmsPass;
}
完成注册的页面:
protected void Button1_Click(object sender, EventArgs e)
{
//将密码转换为UTF-8
byte[] pass = Encoding.UTF8.GetBytes(tbPassword.Text);
//计算UTF-8编码的字节数组的MD5哈希值,再转换为字符串
MD5 md5 = new MD5CryptoServiceProvider();
string strPass = Encoding.UTF8.GetString(md5.ComputeHash(pass));
string strName = Request.QueryString["name"];
if (Page.IsValid)
{
if (RpcHomsinPublic.UpdateUserpass(strName, strPass))
{
returnMessage.Text = "注册成功!";
}
else
{
returnMessage.Text = "注册失败!";
}
}
}
各位大虾都帮忙看看,问题到底出在哪儿啊。我已经遇到过几次这种错误了,老是提示索引超出了数组界限;顺便问问,数组到底有什么界限啊?