DOBON.NETプログラミング道掲示板

No35587 の記事


■35587 / )  Re[3]: DataAdapter.Updateで構文エラー
□投稿者/ 魔界の仮面弁士 大御所(1571回)-(2024/03/12(Tue) 14:40:02)
  • アイコンNo35586に返信(けいさんの記事)
    > テーブルAの主キーの実際の名称に「No」が入っておりました。

    Access には、「Yes/No型」という Boolean 相当のデータ型があるため、
    「No」が予約語になっています。できれば、フィールド名に予約語を採用しないことをお奨めします。


    > Dim i As Integerの行を削除しました。
    > For i =0
    > の記述はありますが、
    > これでもうまくいくのですね。

    VB.NET 2002 までは
     Dim i As Integer
     For i = 0 To 10
    のように、事前に変数宣言が必須でした。

    VB.NET 2003 からは
     For i As Integer = 0 To 10
    のように書くことで、For ブロックのみで有効な「局所変数」を作れるように進化しました。
    https://atmarkit.itmedia.co.jp/fdotnet/special/vs2003/vs2003_04.html


    その後、VB2008 の時代になって「型推論」という機構が生まれ、
     Dim i As Integer = 123
     Dim s As String = "abc"
    といった、変数宣言時に初期値を指定しているコードでは、As 句を省略して
     Dim i = 123
     Dim s = "abc"
    と書いても良いことになりました。この機能があるおかげで、今では
     For i = 0 To 10
    と書いただけで、(事前に Dim i As Integer 無しで)局所変数 i として認識されるようになっています。



    > System.Data.Oledbは、
    > VB.NET2012を使用していたころは、
    > Importsしていました。

    勘違いがあるようですが、「Imports」という機能は参照設定 や NuGet とは別物です。

    プロジェクトから使うには、依存アセンブリを参照設定 もしくは NuGet するなどして
    プロジェクト内から参照しておく必要があるのはご存知の通り。

    一方、それらの機能をコードから呼び出すために
     Imports System.Data
     Imports System.Data.OleDb
    などと書いていたかと思いますが、こちらは必須作業ではありません。

    そもそも Imports ステートメントというのは、
     'Dim adp As New Global.System.Data.OleDb.OleDbDataAdapter()
     Dim adp As New System.Data.OleDb.OleDbDataAdapter()
     'Global.System.Windows.Forms.MessageBox.Show("TEST")
     System.Windows.Forms.MessageBox.Show("TEST")
    といった、名前空間付きの長い型指定を簡略化して、
     Dim cn As New OleDbConnection()
     MessageBox.Show("TEST")
    のように、名前空間を省略してクラス名だけで短く表記するための仕組みに過ぎません。参照設定とは別物です。

    なお、この Imports は、.vb のファイルの先頭に個別に書く方法の他、
    プロジェクト全体に対して一括設定することもできます。

    一括設定するには場合は、プロジェクトのプロパティから、
     ★ [参照設定]タブ > [インポートされた名前空間]
     ☆ [参照]>[全般] ノード > [名前空間のインポート]
    のいずれかで指定します(★は .NET Framework の場合、☆ は .NET の場合です)。

    既定では System.Data 名前空間がインポート済みですが、
    System.Data.OleDb 名前空間はインポートされていないので、ここで追加してもOK。


    そして System.Data.OleDb 名前空間のクラスは、
     .NET Framework では、System.Data.dll というアセンブリに
     .NET では System.Data.OleDb.dll というアセンブリ(System.Data.OleDb v8.0.0 パッケージ)
    に含まれています。

    下記ドキュメント冒頭の「アセンブリ」欄をご覧ください。
    前者は "System.Data.dll" で
    後者は "System.Data.OleDb.dll" になっていますよね。
    このように、名前空間とアセンブリ名は一致しないこともあることに注意しましょう。
    https://learn.microsoft.com/ja-jp/dotnet/api/system.data.oledb.oledbconnection?WT.mc_id=DT-MVP-8907&view=netframework-4.8.1
    https://learn.microsoft.com/ja-jp/dotnet/api/system.data.oledb.oledbconnection?WT.mc_id=DT-MVP-8907&view=dotnet-plat-ext-8.0&viewFallbackFrom=net-8.0


    そして System.Data.dll は通常、標準で有効化されておりますので、
    .NET Framework をお使いなのであれば、アセンブリ参照を追加する必要はないはずです。



    > ですので、自分の中では、プロジェクト自体は.NEY Frameworkだと思っております。.NET8はダウンロードしておりません(詳しくありません)。

    NuGet から得られる System.Data.OleDb 8.0 は .NET Standard 2.0 向けですので、
    .NET Framework でも使えますが、その場合、ターゲット フレームワークを 4.6.2 以上にしてください。

    .NET Framework 3.5 や 4.5.2 といった古いバージョンの場合は、NuGet 参照せずに
    .NET Framework に標準で組み込まれている物をそのまま使いましょう。



    なお、WinForms アプリの場合、新規作成する際のプロジェクト テンプレートにおいて
     ★Windows フォーム アプリケーション ⇒ 既定のプロジェクト名:WindowsApp1
     ☆Windows フォーム アプリ      ⇒ 既定のプロジェクト名:WinFormsApp1
    というよく似た名前のプロジェクトがあるので、注意が必要です。
    前者は .NET Framework 専用、後者は .NET のためのプロジェクトです。

    前者の場合、最初の画面で .NET Framework のフレームワーク バージョンを選択する画面が表示されます。
    後者の場合、2 番目の画面で .NET のフレームワーク バージョンを選択する画面が表示されます。
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -