3

SQL Server ODBC データ ソースをプログラムで作成する方法が必要です。レジストリに直接アクセスすることでこれを行うことができます。更新された SQL Server ドライバーでレジストリ キーまたは値の変更から保護するために、利用可能な (SQL Server/Windows) API を介してこれを行うことができればより良いでしょう。

承認済みの回答 注: SQLConfigDataSource を使用すると、レジストリ キーなどの詳細からコードが抽象化されるため、より堅牢になります。ただし、SQL Server がこれを、(区切り文字列ではなく) 厳密に型指定された属性を取り、ドライバーを介して公開する高レベルの関数でラップすることを望んでいました。

4

5 に答える 5

8

SQLConfigDataSource() が仕事をします。

MSDN の記事

念のため、VB6 の例を次に示します。

Const ODBC_ADD_DSN = 1 'user data source
Const ODBC_ADD_SYS_DSN = 4 'system data source

Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal
hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal
lpszAttributes As String) As Long

strDriver = "SQL Server"
strAttributes = "DSN=Sample" & Chr$(0) _
& "Database=Northwind" & Chr$(0) _
& "Description= Sample Data Source" & Chr$(0) _
& "Server=(local)" & Chr$(0) _
& "Trusted_Connection=No" & Chr$(0)

SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strAttributes)
于 2008-10-04T15:15:21.117 に答える
1

VB.NET の場合、次の方法で実行できます。

「DllImport」のインポート:

Imports System.Runtime.InteropServices

SQLConfigDataSource の宣言:

<DllImport("ODBCCP32.DLL")> Shared Function SQLConfigDataSource _
(ByVal hwndParent As Integer, ByVal fRequest As Integer, _
    ByVal lpszDriver As String, _
    ByVal lpszAttributes As String) As Boolean
End Function

使用例:

Const ODBC_ADD_DSN = 1 'User data source
Const ODBC_ADD_SYS_DSN = 4 'System data source

Public Function CreateSqlServerDataSource
    Dim strDriver As String : strDriver = "SQL Server"
    Dim strAttributes As String : strAttributes = _
        "DSN=Sample" & Chr(0) & _
        "Database=Northwind" & Chr(0) & _
        "Description= Sample Data Source" & Chr(0) & _
        "Server=(local)" & Chr(0) & _
        "Trusted_Connection=No" & Chr(0)

    SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, strDriver, strAttributes)
End Function
于 2008-10-05T07:19:22.310 に答える
0

system32 フォルダーにある odbcad32.exe を使用します。

これにより、odbc データ ソースが正しい場所に追加され、パッチの影響を受けなくなります。

于 2008-10-04T15:08:14.530 に答える
0

これをレジストリで直接行うには、文字列値を次の場所に追加します。

HKLM\SOFTWARE\Microsoft\ODBC\ODBC.INI\ODBC Data Sources

システム DSN を追加するには、または:

HKCU\Software\ODBC\ODBC.INI\ODBC Data Sources

ユーザー DSN を追加します。

値の名前は、作成するデータ ソースの名前であり、データは「SQL Server」である必要があります。

レジストリの「ODBC データ ソース」と同じレベルで、作成するデータ ソースの名前でキーを作成します。

このキーには、次の文字列値が必要です。

Database     - Name of default database to which to connect
Description  - A description of the Data Source
Driver       - C:\WINDOWS\system32\SQLSRV32.dll
LastUser     - Name of a database user (e.g. sa)
Server       - Hostname of machine on which database resides

たとえば、コマンド ラインから reg.exe アプリケーションを使用して、「ExampleDSN」という名前のユーザー データ ソースを追加します。

reg add "HKCU\Software\ODBC\ODBC.INI\ODBC Data Sources" 
    /v ExampleDSN /t REG_SZ /d "SQL Server"
reg add HKCU\Software\ODBC\ExampleDSN 
    /v Database /t REG_SZ /d ExampleDSN
reg add HKCU\Software\ODBC\ExampleDSN 
    /v Description /t REG_SZ /d "An Example Data Source"
reg add HKCU\Software\ODBC\ExampleDSN
    /v Driver /t REG_SZ /d "C:\WINDOWS\system32\SQLSRV32.DLL"
reg add HKCU\Software\ODBC\ExampleDSN
    /v LastUser /t REG_SZ /d sa
reg add HKCU\Software\ODBC\ExampleDSN
    /v Server /t REG_SZ /d localhost
于 2008-10-04T15:13:04.177 に答える
0

C# を使用したサンプル:

(詳細な SQL Server パラメータ リファレンスはhttp://msdn.microsoft.com/en-us/library/aa177860.aspxにあります)

using System.Runtime.InteropServices; 

        private enum RequestFlags : int
        {

            ODBC_ADD_DSN = 1,
            ODBC_CONFIG_DSN = 2,
            ODBC_REMOVE_DSN = 3,
            ODBC_ADD_SYS_DSN = 4,
            ODBC_CONFIG_SYS_DSN = 5,
            ODBC_REMOVE_SYS_DSN = 6,
            ODBC_REMOVE_DEFAULT_DSN = 7

        }

        [DllImport("ODBCCP32.DLL", CharSet = CharSet.Unicode, SetLastError = true)]
        private static extern bool SQLConfigDataSource(UInt32 hwndParent, RequestFlags  fRequest, 
                                 string lpszDriver, string lpszAttributes);

        public static void CreateDSN()
        {

            string strDrivername = "SQL Server";
            string strConfig =  "DSN=StackOverflow\0" +
                                   "Database=Northwind\0" +
                                   "Description=StackOverflow Sample\0" +
                                   "Server=(local)\0" +
                                   "Trusted_Connection=No\0";

            bool success = SQLConfigDataSource(0, RequestFlags.ODBC_ADD_SYS_DSN, strDrivername, strConfig);

        }
于 2008-11-20T23:17:07.863 に答える