我们老师布置了一份作业,我有个问题不明白特来向大家请教:
我做的是一个招标功能,主要有三张表:1.招标信息表ZBXX(ZID,Zname,Zmoney)列名分别是:编号、项目名、需要的保证金数额。2.保证金表:BZJ(BID,ZID,Buser,Bmoney)列名分别是:编号、ZID是ZBXX的外键、交保证金用户名、已交保证金数额。3.投标信息表:TBXX(,,)。现在要求从前台页面文本框中输入一个招标项目的编号,并且从这两张表中选取出Zmoney、Bmoney,判断这两个值是否相等,如果相等则可以进行投标,往表TBXX(,,)中插入数据,不等则弹出“保证金不符”的提示框,我写的代码是:
protected void btnbid_Click(object sender, EventArgs e)
{ SqlConnection sqlconn = myCon.getCon();
sqlconn.Open();
string strComm1 = "SELECT Zmoney,Bmoney FROM ZBXX,BZJ WHERE ZBXX.ZID='" + ZID.Text + "' AND BZJ.ZID='" + ZID.Text + "'AND BZJ.Buser='" + Session["name"].ToString() + "'";
SqlDataAdapter myApter = new SqlDataAdapter(strComm1, sqlconn);
DataSet myDS = new DataSet();
myApter.Fill(myDS, "ZBXX,BZJ");
DataRowView rowView = myDS.Tables["ZBXX,BZJ"].DefaultView[0]; if (Convert.ToString(rowView["Zmoney"]) == Convert.ToString(rowView["Bmoney"]))
{
string strComm2 = "INSERT INTO TBXX VALUES(,,,)";
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
sqlconn.Close();
}这段代码应该怎么改才能够从2张表中选出Zmoney、Bmoney并比较?(我试过了INSERT语句是没问题的)
我做的是一个招标功能,主要有三张表:1.招标信息表ZBXX(ZID,Zname,Zmoney)列名分别是:编号、项目名、需要的保证金数额。2.保证金表:BZJ(BID,ZID,Buser,Bmoney)列名分别是:编号、ZID是ZBXX的外键、交保证金用户名、已交保证金数额。3.投标信息表:TBXX(,,)。现在要求从前台页面文本框中输入一个招标项目的编号,并且从这两张表中选取出Zmoney、Bmoney,判断这两个值是否相等,如果相等则可以进行投标,往表TBXX(,,)中插入数据,不等则弹出“保证金不符”的提示框,我写的代码是:
protected void btnbid_Click(object sender, EventArgs e)
{ SqlConnection sqlconn = myCon.getCon();
sqlconn.Open();
string strComm1 = "SELECT Zmoney,Bmoney FROM ZBXX,BZJ WHERE ZBXX.ZID='" + ZID.Text + "' AND BZJ.ZID='" + ZID.Text + "'AND BZJ.Buser='" + Session["name"].ToString() + "'";
SqlDataAdapter myApter = new SqlDataAdapter(strComm1, sqlconn);
DataSet myDS = new DataSet();
myApter.Fill(myDS, "ZBXX,BZJ");
DataRowView rowView = myDS.Tables["ZBXX,BZJ"].DefaultView[0]; if (Convert.ToString(rowView["Zmoney"]) == Convert.ToString(rowView["Bmoney"]))
{
string strComm2 = "INSERT INTO TBXX VALUES(,,,)";
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
sqlconn.Close();
}这段代码应该怎么改才能够从2张表中选出Zmoney、Bmoney并比较?(我试过了INSERT语句是没问题的)
protected void btnbid_Click(object sender, EventArgs e)
{ SqlConnection sqlconn = myCon.getCon();
sqlconn.Open();
string strComm1 = "SELECT Zmoney,Bmoney FROM ZBXX,BZJ WHERE ZBXX.ZID='" + ZID.Text.Trim() + "' AND BZJ.ZID='" + ZID.Text.Trim() + "'AND BZJ.Buser='" + Session["name"].ToString() + "'";
SqlDataAdapter myApter = new SqlDataAdapter(strComm1, sqlconn);
DataSet myDS = new DataSet();
myApter.Fill(myDS, "ZBXX,BZJ");
DataRowView rowView = myDS.Tables["ZBXX,BZJ"].DefaultView[0]; if (rowView["Zmoney"].ToString().Equals(rowView["Bmoney"].ToString())
{
string strComm2 = "INSERT INTO TBXX VALUES(,,,)";
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
sqlconn.Close();
}
索引 0 不是为负数,就是大于行数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 索引 0 不是为负数,就是大于行数。源错误:
行 49: DataSet myDS = new DataSet();
行 50: myApter.Fill(myDS, "ZBXX,BZJ");
行 51: DataRowView rowView = myDS.Tables["ZBXX,BZJ"].DefaultView[0];
行 52:
行 53: if (rowView["Zmoney"].ToString().Equals(rowView["Bmoney"].ToString()))
还有改成3楼的DataRowView rowView = myDS.Tables[0].DefaultView;显示:
编译错误
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误消息: CS0029: 无法将类型“System.Data.DataView”隐式转换为“System.Data.DataRowView”
DataRowView rowView = myDS.Tables["ZBXX_BZJ"].DefaultView[0];
DataRowView rowView = myDS.Tables["ZBXX_BZJ"].DefaultView[0];
当保证金不符时:
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
还是:
索引 0 不是为负数,就是大于行数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 索引 0 不是为负数,就是大于行数。源错误:
行 49: DataSet myDS = new DataSet();
行 50: myApter.Fill(myDS, "ZBXX_BZJ");
行 51: DataRowView rowView = myDS.Tables["ZBXX_BZJ"].DefaultView[0];
行 52:
行 53: if (rowView["Zmoney"].ToString().Equals(rowView["Bmoney"].ToString()))
谢谢您的热心帮助
foreach(DataRowView drv in myDS.Tables[0].DefaultView)
{
if (double.Parse(drv["Zmoney"].ToString()) == double.Parse(drv["Bmoney"].ToString()))
{
string strComm2 = "INSERT INTO TBXX VALUES(,,,)";
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
}
sqlconn.Close();
}
试试下面的这个看看,你打个断点跟踪一下吧,很容找到错误的。将光标置于 SqlConnection sqlconn = myCon.getCon(); 语句前,按下F9,然后F5,点下按钮后,按F11单步调试,走走看
foreach(DataRowView drv in myDS.Tables[0].DefaultView)
{
if (drv["Zmoney"].ToString() == drv["Bmoney"].ToString())
{
string strComm2 = "INSERT INTO TBXX VALUES(,,,)";
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
}
sqlconn.Close();
}
protected void btnbid_Click(object sender, EventArgs e)
{
SqlConnection sqlconn = myCon.getCon();
sqlconn.Open();
string strComm1 = "SELECT Zmoney,Bmoney FROM ZBXX,BZJ WHERE ZBXX.ZID='" + ZID.Text + "' AND BZJ.ZID='" + ZID.Text + "'AND BZJ.Buser='" + Session["name"].ToString() + "'";
SqlCommand sqlcom = new SqlCommand(strComm1, sqlconn);
SqlDataReader read = sqlcom.ExecuteReader();
read.Read(); if (read.HasRows)
{
if (read["Zmoney"].ToString().Trim() == read["Bmoney"].ToString().Trim())
{
string strComm2 = "INSERT INTO TBXX VALUES('" + ZID.Text + "','" + Session["BID"].ToString() + "','" + Request.QueryString["TID"] + "','" + DateTime.Now.ToString() + "')";
sqlBind.DataCom(strComm2);
Response.Write("<script>alert('恭喜您,投标成功!');location.href='../BIDUSER/UserLogined.aspx';</script>");
return;
}
} else
{
Response.Write("<script>alert('对不起,您对该项目的保证金不符!');location.href='../BIDUSER/UserLogined.aspx';</script>");
}
read.Close();
sqlconn.Close();
}虽然成功了,但是用以前的方法为什么else()语句没法执行?思考......