症状
ASP.NET で、データの編集を行った場合、次のエラーが発生。
‘/’ アプリケーションでサーバー エラーが発生しました。
‘nvarchar’ 付近に不適切な構文があります。
スカラー変数 “@ID” を宣言してください。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.Data.SqlClient.SqlException: ‘nvarchar’ 付近に不適切な構文があります。
スカラー変数 “@ID” を宣言してください。
原因
SQLサーバーの列名にスペースが含まれている場合に、更新のSQLコマンドが正しく生成されないVisual Studio のバグ。
対策1
SQLサーバーの列名のスペースを削除するか、’_’ で置き換える
対策2
Updating イベントで、CommandTextと、ParameterName を置き換える。
例: 列名 [test data]の場合
e.Command.CommandText で、”@test_data”となっているが、
一方、e.CommandParameters では、”@test data”となっている。このため、パースが失敗して、アップデートに失敗しているものと思われる。
そこで、この名前を一致させる。
protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e) { e.Command.CommandText = e.Command.CommandText.Replace("@test_data", "@testdata"); foreach (System.Data.Common.DbParameter p in e.Command.Parameters) { if (p.ParameterName == "@test data") { p.ParameterName = "@testdata"; } } }