这是我得到的错误:
索引(从零开始)必须大于或等于零且小于参数列表的大小
这是代码:
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html>
<script runat="server">
public void Page_Load()
{
string a, c;
a = Request.Form["username"];
string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("SQL/Site_Database.accdb");
string sqlstring = string.Format("select * from iUsers_Table where (iusername='{0}')", a);
OleDbDataAdapter da = new OleDbDataAdapter(sqlstring, connstring);
DataSet ds = new DataSet();
da.Fill(ds);
c = Request.Form["mail"];
string connstring1 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("SQL/Site_Database.accdb");
string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);
OleDbDataAdapter da1 = new OleDbDataAdapter(sqlstring1, connstring1);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
if ((ds.Tables[0].Rows.Count == 0) || (ds1.Tables[0].Rows.Count == 0))
{
string b, d, e, f, g, h;
b = Request.Form["password"];
d = Request.Form["gender"];
e = Request.Form["age"];
f = Request.Form["prob"];
g = Request.Form["prob_val"];
h = Request.Form["fitness"];
sqlstring = string.Format("insert into iUsers_Table (iusername,ipassword,imail,igender,iage,iproblem,iproblem_value,ifitness) values('{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}')", a, b, c, d, e, f, g, h);
OleDbConnection conn = new OleDbConnection(connstring);
OleDbCommand cmd = new OleDbCommand(sqlstring, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Session["connect_status"] = "connected";
Response.Redirect("My_Plan.aspx");
}
else
{
if ((ds.Tables[0].Rows.Count) > 0)
{
Session["subscribed"] = "exist";
if ((ds1.Tables[0].Rows.Count) > 0)
{
Session["mail"] = "exist";
Response.Redirect("index.aspx");
}
Response.Redirect("index.aspx");
}
}
}
</script>
我创建了一个注册表单,此代码用于将数据插入数据库,并检查现有的相同邮件和用户名值。
任何人都知道为什么会这样吗?
谢谢!
答案 0 :(得分:3)
string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{2}')", c);
{2}不存在,因为string.Format()中只有一个参数。 请注意,我用谷歌搜索了它,导致我here(暗示提示)。
所以改成它:
string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);
再试一次。
答案 1 :(得分:0)
鉴于你没有发现错误发生的行,我将假设问题出在这行代码上,因为它错了:
string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{2}')", c);
{2}应该是{0},因为它是一个基于零的索引,并且你只告诉string.Format需要一个参数。
答案 2 :(得分:0)
正如其他人回答的那样,问题是你的string.Format。但我还要指出在C#6中添加Interpolated Strings可以让你改变
limb
到
string sqlstring1 = string.Format("select * from iUsers_Table where (imail='{0}')", c);
这是一种更清晰,更易读的格式化字符串的方法,应该有助于避免将来容易出错。
修改:由于没有修复您的异常,请确保string sqlstring1 = $"select * from iUsers_Table where (imail='{c}')"
大于0,如果ds.Tables.Length
ds.Tables[0]
ds.Tables
将会抛出异常{1}}为空。
我也注意到你错过了
中的一些引用sqlstring = string.Format("insert into iUsers_Table (iusername,ipassword,imail,igender,iage,iproblem,iproblem_value,ifitness) values('{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}')", a, b, c, d, e, f, g, h);
{6}
左右虽然我不确定会导致您获得的异常。告诉我们发生异常的地方会有很大帮助。
答案 3 :(得分:0)
解决了它。这是另一页上的问题。
感谢大家的评论。 :)