ما هو أبسط طريقة، أكثر للصيانة لخلق SQL خادم مصدر بيانات ODBC؟

StackOverflow https://stackoverflow.com/questions/170466

سؤال

وأحتاج إلى طريقة برمجية إنشاء مصدر بيانات ODBC SQL خادم. أستطيع أن أفعل ذلك عن طريق الدخول مباشرة في التسجيل. سيكون من الأفضل إذا كان هذا يمكن أن يتم ذلك عن طريق API المتاحة (SQL الخادم / ويندوز) للحماية من التغييرات في مفاتيح التسجيل والقيم مع السائقين خادم SQL المحدثة.

<قوية> الإجابة مقبولة ملاحظة: هل تستخدم SQLConfigDataSource خلاصات رمز من التفاصيل من مفاتيح التسجيل الخ لذلك هذا هو أكثر قوة. وكنت آمل، مع ذلك، أن SQL Server قد اختتم هذا مع وظيفة على مستوى أعلى التي تولت كتابة بشدة سمات (بدلا من سلسلة محددة)، وتعرضت خلال برنامج التشغيل.

هل كانت مفيدة؟

المحلول

و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)

نصائح أخرى

ل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

وكنت استخدام odbcad32.exe الذي يقع في المجلد System32 الخاص بك.

وهذا سيضيف مصادر البيانات ودبك إلى الموقع correcct، التي لن تنفذ من قبل أي بقع.

لقيام بذلك مباشرة في التسجيل يمكنك إضافة قيمة سلسلة ل:

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

لإضافة DSN النظام، أو:

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

لإضافة DSN العضو.

واسم القيمة هو اسم مصدر البيانات الذي تريد إنشاء والبيانات يجب أن تكون 'SQL خادم ".

وفي نفس مستوى "مصادر بيانات 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

ونموذج باستخدام C #:

و(مفصل إشارة SQL المعلمة خادم في http://msdn.microsoft. كوم / EN-US / مكتبة / 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);

        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top