2010-03-14 55 views
6

Tôi đang tạo một ứng dụng là giao diện người dùng để truy cập 2 loại cơ sở dữ liệu - SQLite và SQL Server.Kiểm tra xem SQL Server có được cài đặt trên máy thông qua C#

Vấn đề là, SQLite không cần phải là "đã cài đặt" vì nó chỉ là cơ sở dữ liệu dạng phẳng, nhưng mặt khác, SQL Server (Express/normal) cần được cài đặt trước khi sử dụng. Câu hỏi của tôi rất đơn giản:

Có cách nào để tôi có thể tìm hiểu xem phiên bản SQL Server đã được cài đặt trên máy cục bộ bằng cách sử dụng chương trình C# không?

+1

Cùng câu hỏi: http: // stackoverflow .com/questions/2381055/check-if-sql-server-any-version-được cài đặt –

+0

oh xin lỗi. Cảm ơn ! – Shrayas

Trả lời

8

Nếu ứng dụng của bạn được cài đặt trên máy trong câu hỏi, bạn có thể kiểm tra việc đăng ký sử dụng một cái gì đó tương tự như sau:

using Microsoft.Win32; 
RegistryKey RK = Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\Microsoft SQL Server"); 
    if(RK != null) 
    { 
     // It's there 
    } 
    else 
    { 
     // It's not there 
    } 
+0

có vẻ tốt, chỉ cần thêm một @ ở đầu param OpenSubKey của bạn để cho phép các dấu gạch chéo ngược;) cảm ơn cho câu trả lời! – JM1990

14

Bạn đã có một số cách để làm điều đó:

  • SmoApplication.EnumAvailableSqlServers()
  • SqlDataSourceEnumerator.Instance
  • Truy cập trực tiếp vào hệ thống reg istry

Truy cập trực tiếp không phải là giải pháp được đề xuất bởi MS, vì chúng có thể thay đổi khóa/đường dẫn. Nhưng các giải pháp khác không mạnh mẽ và không cung cấp các phiên bản trên nền tảng 64 bit.

Vì vậy, tôi muốn kiểm tra các phiên bản SQL Server trong System Registry. Làm như vậy, hãy ghi nhớ sự khác biệt trong Truy cập đăng ký giữa các nền tảng x86x64. Windows 64 bit lưu trữ dữ liệu trong các phần khác nhau của hệ thống đăng ký và kết hợp chúng thành các khung nhìn. Vì vậy, việc sử dụng RegistryView là điều cần thiết.

using Microsoft.Win32; 

RegistryView registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32; 
using (RegistryKey hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView)) 
{ 
    RegistryKey instanceKey = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL", false); 
    if (instanceKey != null) 
    { 
     foreach (var instanceName in instanceKey.GetValueNames()) 
     { 
      Console.WriteLine(Environment.MachineName + @"\" + instanceName); 
     } 
    } 
} 

Nếu bạn đang tìm kiếm trường 32-bit trên một hệ điều hành 64-bit (khá lạ, nhưng có thể), bạn sẽ cần phải xem xét:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server 
Các vấn đề liên quan