關於system data sqlclient sqlexception必須宣告純量變數"@"
最近在幫學校設計的網頁程式的進行資料庫轉移,原本都是利用GridView控制項與 AccessDataSource 連接 Access 的資料庫檔案,現在要改用 Microsoft SQL Server 2008 R2,把原先資料連接的控制項 AccessDataSource 改為 SqlDataSource 。
原本以為只要把執行sql動作的語法進行修改,例如下列命令列:
DeleteCommand="DELETE FROM [course] WHERE [序] = ?"
改成 DeleteCommand="DELETE FROM [course] WHERE [識別碼] = @序"
結果執行測試刪除資料的動作就一直出現下列錯誤訊息:
應用程式中發生伺服器錯誤。
必須宣告純量變數 "@序"。
描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外狀況詳細資訊: System.Data.SqlClient.SqlException: 必須宣告純量變數 "@序"。
原始程式錯誤:
檢查程式碼與網頁的原始檔,看不出來有任何錯誤,再測試執行更新的動作命令,同樣有(序 = @序)的參數設定如下列:
UpdateCommand="UPDATE course SET 開課年級 = @開課年級, 課程代碼 = @課程代碼, 領域別 = @領域別 WHERE (序 = @序)
執行結果卻是正常沒有錯誤訊息,反覆查了半天才發現原來漏掉設定 GridView 控制項的 DataKeyNames的屬性。
必須設定 DataKeyNames 屬性,以便讓 GridView 控制項的自動更新和刪除功能運作,所以設定DataKeyNames="序"就可以正常執行刪除資料的動作。
歡迎引用,請注明來源出處!