|  | 分類:[ASP.NET (VB)]
 
 いつもお世話になっております。
 下記の事象は既知の問題でしょうか?
 
 現在MS-Accessのテーブルのみを格納したMDBファイルとテーブル以外のVBA含めたaccdbファイルのシステムを
 使っております。
 今回LAN内でのWeb化をするためにVisual Studio2019を使いWebシステムを作ろうと考えています。
 これは以前(Visual Studio2005の頃)、Visual StudioでデータソースはAccessを使いシステムを構築したこと
 があったため久しぶりではあるもののおそらく同じように行けるのかなと思ったからです。
 
 【試したこと】
 Visual Studio2019 でデータソースをMS AccessのMDBを指定し、Gridでデータ編集、削除を可能に指定。
 デバッグすると一応データは表示されました。
 ところが編集モードでデータを変更、「更新」リンクを押すと下記メッセージが表示されます。
 これは削除も同様です。
 
 (エラーメッセージ ここから)----------------------------------------------------------------------
 
 '/' アプリケーションでサーバー エラーが発生しました。
 1 つ以上の必要なパラメーターの値が設定されていません。
 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
 
 例外の詳細: System.Data.OleDb.OleDbException: 1 つ以上の必要なパラメーターの値が設定されていません。
 
 [OleDbException (0x80040e10): 1 つ以上の必要なパラメーターの値が設定されていません。]
 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1216113
 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +256
 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +216
 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +60
 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +164
 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +112
 System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation) +400
 System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +704
 System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +106
 System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow row, Int32 rowIndex, Boolean causesValidation) +1244
 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +917
 System.Web.UI.WebControls.GridView.OnBubbleEvent(Object source, EventArgs e) +92
 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
 System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(Object source, EventArgs e) +97
 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
 System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +127
 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +168
 System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9858668
 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1696
 
 (エラーメッセージ ここまで)----------------------------------------------------------------------
 
 あれこれ試したところ、どうもAccess側の主キーのフィールド名が日本語の場合に発生することがわかりました。
 ただ本当にこれが原因と特定が出来ない状況もありました。
 
 テスト用のテーブルを作成し、全フィールド名はアルファベットの場合は問題なし。
 主キー以外のフィールド名を日本語に変更しても問題なし。
 この流れで主キーのフィールドを日本語に変更しても問題なし。
 
 テスト用ではなく現在使用中のMDBの中のテーブルをコピーし、コピーしたテーブル内の主キーのみをアルファベットに変更すると問題なし。
 再度日本語に戻すとエラー発生。
 
 やっぱり主キーのフィールド名が原因なのかと思えそうですが、日本語に変更しても問題ないケースもあるのです。
 現在Accessのみで稼働しているシステムは複雑で主キーのフィールド名を変更するのもかなりの工数がかかる見込みです。
 
 皆様にアドバイスをいただきたいのが
 1.VS2019のデータソースがAccessの場合主キーのフィールド名は1バイト英数字にするべきか?
 2.Webシステムで使用するAccessのテーブルのクローンを作成するようなことは可能か?(この場合フィールド名は1バイト英数字)
 3.現在のテーブルはそのまま使えるが、何か設定が悪いのか?
 
 
 ご教授のほどよろしくお願いいたします。
 
 |