以前用VB6时连接数据库时,连接字符串调用*.udl文件,觉得很方便.但在VB.NET里调用*.udl文件时,有很大不同,VB6简单的写上:file name=c:/*.dul就行了,但VB.net是通过读取文件的方式来处理的,下面是全部代码。与大家共享:在您用时只要调用这个类:
Dim MyconnData As New ConnData
public Myconn As New SqlConnection(MyconnData.GetSQLConnectionString)
Imports System Imports System.IO Public Class ConnData Class ConnData Private m_strFileName As String Private m_strConnectionText As String Private m_strPesistSecurity As String Private m_strIntegradedSecurity As String Private m_strReconstructed As String Private m_strDefaultFilename As String Private m_strDatasource As String Private m_strPassword As String Private m_strUserID As String Private m_strCatalog As String 'Database Public Event CloseApplication() Public Sub New()Sub New() m_strDefaultFilename = "DataLink.udl" ReadFromFile() SplitConnectionString() End Sub Public Function GetSQLConnectionString()Function GetSQLConnectionString() As String ReconstructSQLConnectionString() Return m_strReconstructed End Function Private Sub ReconstructSQLConnectionString()Sub ReconstructSQLConnectionString() m_strReconstructed = m_strPesistSecurity & ";" If Not IsNothing(m_strIntegradedSecurity) Then m_strReconstructed &= m_strIntegradedSecurity & ";" Else m_strReconstructed &= m_strPassword & ";" If Not m_strUserID.Length = 0 Then m_strReconstructed &= m_strUserID & ";" End If End If m_strReconstructed &= m_strCatalog & ";" m_strReconstructed &= m_strDatasource & ";" m_strCatalog = m_strCatalog.Substring(16) m_strDatasource = m_strDatasource.Substring(12) If Not IsNothing(m_strPassword) Then m_strPassword = m_strPassword.Substring(9) m_strUserID = m_strUserID.Substring(8) End If End Sub格式化从*.udl文件中,读取的字符串#Region "格式化从*.udl文件中,读取的字符串" Private Sub SplitConnectionString()Sub SplitConnectionString() Dim strArray As String() = Nothing Dim strString As String Dim strProvider As String Dim strDRIVER As String Dim strSERVER As String Dim strUID As String Dim strDATABASE As String strArray = m_strConnectionText.Split(";") If strArray(0).IndexOf("[oledb]") = -1 Then Dim nAnswer As DialogResult nAnswer = MessageBox.Show("This file cannot be read" & vbCr & _ "Open another file ?", "Read udl File", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Error) If nAnswer = DialogResult.Yes Then ReadFromFile() SplitConnectionString() Exit Sub Else Dim strDescription As String = "Connection Failed." & vbCr & "Closing Application" Err.Raise(vbObjectError + 999, , strDescription) RaiseEvent CloseApplication() End If End If For Each strString In strArray If strString.IndexOf("Provider") > -1 Then strProvider = strString.Substring(strString.IndexOf("Provider")) End If If strString.IndexOf("Password") > -1 Then m_strPassword = strString End If If strString.IndexOf("Data") > -1 Then m_strDatasource = strString End If If strString.IndexOf("User") > -1 Then m_strUserID = strString End If If strString.IndexOf("Initial") > -1 Then m_strCatalog = strString End If If strString.IndexOf("Integrated") > -1 Then m_strIntegradedSecurity = strString End If If strString.IndexOf("Persist") > -1 Then m_strPesistSecurity = strString End If If strString.IndexOf("DRIVER") > -1 Then strDRIVER = strString.Substring(strString.IndexOf("DRIVER")) End If If strString.IndexOf("SERVER") > -1 Then strSERVER = strString End If If strString.IndexOf("UID") > -1 Then strUID = strString End If If strString.IndexOf("DATABASE") > -1 Then strDATABASE = strString strDATABASE = strDATABASE.Remove(strDATABASE.Length - 3, 3) End If Next 'Check if the connection string connects to SQLServer or Oracle Server. If strProvider.IndexOf("MSDASQL") > -1 Then If strDRIVER.IndexOf("SQL Server") > -1 Then m_strDatasource = "Data Source" & strSERVER.Substring(6) If strUID.Length > 0 Then m_strUserID = "User ID" & strUID.Substring(3) End If m_strCatalog = "Initial Catalog " & strDATABASE.Substring(8) Else 'not sqlserver database Dim nAnswer As DialogResult nAnswer = MessageBox.Show("This file does not connect to SQL Server Database" & vbCr & _ "Open another file ?", "Read udl File", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Error) If nAnswer = DialogResult.Yes Then ReadFromFile() SplitConnectionString() Exit Sub Else Dim strDescription As String = "Connection Failed." & vbCr & "Closing Application" Err.Raise(vbObjectError + 999, , strDescription) End If End If ElseIf strProvider.IndexOf("SQLOLEDB") > -1 Then m_strDatasource = m_strDatasource.Remove(m_strDatasource.Length - 2, 2) ElseIf strProvider.IndexOf("OraOLEDB") > -1 Then 'Oracle provider for OLEDB ElseIf strProvider.IndexOf("MSDAORA") > -1 Then 'Microsoft Provider for Oracle Else 'not Oracle or sqlserver database Connection Dim nAnswer As DialogResult nAnswer = MessageBox.Show("This file does not connect to Oracle Server or SQL Database" & vbCr & _ "Open another file ?", "Read udl File", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Error) If nAnswer = DialogResult.Yes Then ReadFromFile() SplitConnectionString() Exit Sub Else Dim strDescription As String = "Connection Failed." & vbCr & "Closing Application" Err.Raise(vbObjectError + 999, , strDescription) End If End If End Sub#End Region读取*.UDL文件内容,如是*.UDL文件不存在,则创建#Region "读取*.UDL文件内容,如是*.UDL文件不存在,则创建" Private Sub ReadFromFile()Sub ReadFromFile() Dim myStreamReader As StreamReader Dim strFileName As String Try m_strFileName = AppDomain.CurrentDomain.BaseDirectory & m_strDefaultFilename strFileName = m_strFileName 'If the UDL file cannot be found Create a new one If Not File.Exists(m_strFileName) Then m_strFileName = strFileName CreateUDLFile(strFileName) End If myStreamReader = File.OpenText(m_strFileName) ' Read the entire file in one pass m_strConnectionText = myStreamReader.ReadToEnd() Catch exc As Exception ' Show the exception to the user. Dim strDescription As String = "File could not be opened or read." + vbCrLf + _ "Please verify that the filename is correct, " + _ "and that you have read permissions for the desired " + _ "directory." + vbCrLf + vbCrLf + "Exception: " + exc.Message Err.Raise(vbObjectError + 991, , strDescription) RaiseEvent CloseApplication() Finally ' Close the object if it has been created. If Not myStreamReader Is Nothing Then myStreamReader.Close() End If End Try End Sub Private Sub CreateUDLFile()Sub CreateUDLFile(ByVal strFileName As String) 'Create an empty text file Dim fs As New System.IO.FileStream(strFileName, System.IO.FileMode.CreateNew) fs.Close() 'Call Data Link App and write information to it Dim prProcess As New ProcessStartInfo prProcess.FileName = strFileName Dim pProcess As Process = Process.Start(prProcess) pProcess.WaitForInputIdle() pProcess.WaitForExit() pProcess.Close() 'Check if the created file is a valid UDl file, if not, delete it. Dim myStreamReader As System.IO.StreamReader = System.IO.File.OpenText(strFileName) Dim m_strConnectionText As String = myStreamReader.ReadToEnd() myStreamReader.Close() Dim strArray() As String = m_strConnectionText.Split(";") If strArray(0).IndexOf("[oledb]") = -1 Then If System.IO.File.Exists(strFileName) Then System.IO.File.Delete(strFileName) End If End If End Sub#End RegionEnd Class