2012-02-13 87 views
2

有人可以帮助我吗? 我需要通过系统DSN检查我的ODBC连接到AS400伺服器,并创建一个系统DSN,如果一个特定的不存在。 我试过Google搜索,一直没能找到对我有好处的东西。检查系统DSN并创建系统DSN(如果不存在)(i系列访问ODBC驱动程序)

顺便说一句,我是相当新的编程。任何帮助都感激不尽。 谢谢

+1

[This answer](http://stackoverflow.com/questions/334939/)可能会有所帮助。 – dmc 2012-02-13 14:06:58

回答

7

经过网上提供的几个较简单的例子之后,这是我设法想出来的(它对我来说工作正常)。

using System; 
using System.Runtime.InteropServices; 

public class ODBC_Manager 
{ 
    [DllImport("ODBCCP32.dll")] 
    public static extern bool SQLConfigDataSource(IntPtr parent, int request, string driver, string attributes); 

    [DllImport("ODBCCP32.dll")] 
    public static extern int SQLGetPrivateProfileString(string lpszSection, string lpszEntry, string lpszDefault, string @RetBuffer, int cbRetBuffer, string lpszFilename); 

    private const short ODBC_ADD_DSN = 1; 
    private const short ODBC_CONFIG_DSN = 2; 
    private const short ODBC_REMOVE_DSN = 3; 
    private const short ODBC_ADD_SYS_DSN = 4; 
    private const short ODBC_CONFIG_SYS_DSN = 5; 
    private const short ODBC_REMOVE_SYS_DSN = 6; 
    private const int vbAPINull = 0; 

    public void CreateDSN(string strDSNName) 
    { 
     string strDriver; 
     string strAttributes; 

     try 
     { 
      string strDSN = ""; 

      string _server = //ip address of the server 
      string _user = //username 
      string _pass = //password 
      string _description = //not required. give a description if you want to 


      strDriver = "iSeries Access ODBC Driver"; 

      strAttributes = "DSN=" + strDSNName + "\0"; 
      strAttributes += "SYSTEM=" + _server + "\0"; 
      strAttributes += "UID=" + _user + "\0"; 
      strAttributes += "PWD=" + _pass + "\0"; 

      strDSN = strDSN + "System = " + _server + "\n"; 
      strDSN = strDSN + "Description = " + _description + "\n"; 

      if (SQLConfigDataSource((IntPtr)vbAPINull, ODBC_ADD_SYS_DSN, strDriver, strAttributes)) 
      { 
       Console.WriteLine("DSN was created successfully"); 
      } 
      else 
      { 
       Console.WriteLine("DSN creation failed..."); 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.InnerException != null) 
      { 
       Console.WriteLine(ex.InnerException.ToString()); 
      } 
      else 
      { 
       Console.WriteLine(ex.Message.ToString()); 
      } 
     } 
    } 

    public int CheckForDSN(string strDSNName) 
    { 
     int iData; 
     string strRetBuff = ""; 
     iData = SQLGetPrivateProfileString("ODBC Data Sources", strDSNName, "", strRetBuff, 200, "odbc.ini"); 
     return iData; 
    } 
} 

...然后从您的应用程序调用方法。

static void Main(string[] args) 
{ 
    ODBC_Manager odbc = new ODBC_Manager(); 
    string dsnName = //Name of the DSN connection here 

    if (odbc.CheckForDSN(dsnName) > 0) 
    { 
     Console.WriteLine("\n\nODBC Connection " + dsnName + " already exists on the system"); 
    } 
    else 
    { 
     Console.WriteLine("\n\nODBC Connection " + dsnName + " does not exist on the system"); 
     Console.WriteLine("\n\nPress 'Y' to create the connection?"); 

     string cont = Console.ReadLine(); 
     if (cont == "Y" || cont == "y") 
     { 
      odbc.CreateDSN(dsnName); 
      Environment.Exit(1); 
     } 
     else 
     { 
      Environment.Exit(1); 
     } 
    } 
}