A. 指定的参数已超出有效值的范围
从你的题目看,应该是sql查询时所抛出的异常。当你的SQL语句试图更新不存在的ROW(行)或Column(列)时或者你更新的数据类型不同或字符的长度超出列的限制都会抛出异常。因为你没有列出数据库里表的架构因此还不能根据你的源码确认你在哪点出错闭简了。
另外你最好使用SqlParameter参与建立查询语句,否则你族嫌的查询语句稍不注意就会出现参数语法的错误尤其在字符、时间、关键字等方面很容易出现难以察觉的问题。
看到你补充表的架构了.
注兆态手意一下,SQL Server的DataTime类型与.net的是不同的。建议你还是让SqlParameter帮你转换吧
另外,你的SQL语句UPDATE命令怎么没有WHERE的语句,那查询怎么知道你要更新哪一行啊。
如果你是增加记录请用INSERT INTO 命令。
如果你是修改记录请用UPDATE tableName SET ...WHERE STUD_ID=...
你参考一下吧:
sqlcon = new SqlConnection(strCon );
string sqlstr ="update STUD_INFO set STUD_NAME=@STUD_NAME,STUD_BIRTHDAY=@STUD_BIRTHDAY,STUD_GENDER=@STUD_GENDER,STUD_ADDRESS=@STUD_ADDRESS,STUD_TELEPHONE=@STUD_TELEPHONE,STUD_ZIPCODE=@STUD_ZIPCODE,STU_MARK=@STU_MARK where STUD_ID=@STUD_ID";
sqlcom = new SqlCommand(sqlstr,sqlcon );
sqlcom.Parameters.Add(new SqlParameter("@STUD_NAME",SqlDbType.NVarChar,GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim()));
sqlcom.Parameters.Add(new SqlParameter("@STUD_BIRTHDAY",(DateTime)..../*将生日转为DateTime类型*/);
/*把其它列的参数加入,包括@STUD_ID*/
...............
...............
sqlcon.Open();
..........
/*最后清除参数集合*/
sqlcom.Parameters.Clear();
B. 指定的参数已超出有效值的范围。 参数名: index
通篇看,代码应态嫌该是没问题的,可能出这森闭桥个异常的代码可能是:
Sno = (TextBox)UpdateSB.Rows[e.RowIndex].Cells[0].Controls[0];
Bno = (TextBox)UpdateSB.Rows[e.RowIndex].Cells[1].Controls[0];
这两个找控件的地方和你的Mybind方法。
找控件建此猛议你用UpdateSB.Rows[e.RowIndex]。FindControl("name")这样可读性高些。
还有,建议你自己调试一下吧。
C. 关于SQL Server中限制值的范围的问题。
简单的范围可以使用check约束
使用的是sql
server
2008简单说一下从sql
server
management
studio
中创建check,右击表格---选择设计----右击要进行限制的列----选择check约束----在表达式中输入限制条件,例如,id>10,修改一下名字,关闭就可以了;
还可以用命令创建,用命令创建check约束分为,创建表时候建立约束和创建表之后建立约束,可查看相关书籍资料,有详细描述。
p.s.
check约束是通过check约束中的表达式确定有效值,不是基于其它表格获取有效值