-1

VB.NET を使用して Access (.accdb) データベース用の ODBC システム データ ソースを追加するために最善を尽くしました。Google から検索して、多くの機能を試しましたが、何も機能しませんでした。

私が試したコードは次のとおりです。

Sub createDSN()

    Const ODBC_ADD_SYS_DSN = 4 ' Add data source
    Dim dbpath As String = "C:\Jenit\Data\001.accdb"

    Dim ret As Integer, Driver As String, Attributes As String

    Driver = "Microsoft Access Driver (*.MDB,*.accdb)" & Chr(0)
    Attributes = "DSN=" & "Hello" & Chr(0)
    Attributes = Attributes & "Uid=Admin" & Chr(0) & "pwd=pwd" & Chr(0)
    Attributes = Attributes & "DBQ=" & dbpath & Chr(0) & Chr(0)

    ret = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, Driver, Attributes) 'Error Here


    'ret is equal to 1 on success and 0 if there is an error
    If ret <> 1 Then
        MsgBox("DSN Creation Failed")
    Else
        MsgBox("Successful")
    End If
End Sub 'Main

エラー:

PInvoke 関数 'j!j.Form1::SQLConfigDataSource' の呼び出しにより、スタックのバランスが崩れています。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します。

助けてください。

4

1 に答える 1

1

あなたの<DllImport>声明を見なければ、正確な答えを出すのは難しいですが、私は(pinvoke.netのsqlconfigdatasource(odbccp32)SQLConfigDataSourceに基づいて)知識に基づいた推測をしています. :

Public Shared Function SQLConfigDataSourceW(ByVal hwndParent As Long, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Integer

実際hwndParentには が 32 ビット整数 ( IntegerVB.NET の場合) の場合、次のようになります。

Public Shared Function SQLConfigDataSourceW(ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Integer

次のように呼び出します。

ret = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, Driver, Attributes)

Note0は ですが、Integer0&ですLong

編集 pinvoke.net から:

<DllImport("ODBCCP32.dll",CallingConvention:=CallingConvention.WinAPI,CharSet:=CharSet.Unicode,SetLastError:=True)>
Public Shared Function SQLConfigDataSourceW(ByVal hwndParent As Integer, ByVal fRequest As Integer, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Integer

次に、現在の行を置き換えるだけです

ret = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, Driver, Attributes)

これとともに:

ret = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, Driver, Attributes)
于 2013-09-05T08:38:48.060 に答える