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約束中的表達式確定有效值,不是基於其它表格獲取有效值