2011-12-28 29 views
8

Tôi đang tạo một thư viện lớp cần tệp .SQL làm đầu vào (FileInfo) và một chuỗi kết nối. Sau đó nó cố gắng thực thi tệp sql đối với kết nối.Cách thích hợp để phát hiện nếu SQLCMD.exe được cài đặt?

tôi đã quyết định hỗ trợ SMO của Microsoft và SQLCMD.exe

Trong thử nghiệm, tôi đã nhận thấy trên nhiều máy trong môi trường của tôi, rằng SQLCMD không đến được cài đặt theo mặc định. Lỗi chương trình của tôi khi chỉ cố gắng chạy quá trình SQLCMD.exe.

Cách thích hợp để tìm kiếm nó mà không cần tìm kiếm toàn bộ ổ cứng là gì? Có một vị trí đăng ký chung chỉ định nếu nó được cài đặt không? Thông thường khi nó được cài đặt, tôi nghĩ rằng một vị trí PATH được thiết lập.

Rất cám ơn.

+0

Bạn có thể thử thực thi 'sqlcmd.exe -?' Trong tiến trình trong ứng dụng C# của bạn - nếu nó hoạt động, thì SQLCMD hiện diện - nếu không, nó sẽ cho bạn biết một cái gì đó như "không tìm thấy tập tin" hoặc "lệnh không hợp lệ "hoặc một cái gì đó .... –

+0

@marc_s yea đó là những gì tôi đã suy nghĩ ... chỉ cần không phải là những gì tôi nghĩ là sạch sẽ nhất cho một thư viện lớp đó sẽ là một thành phần thiết yếu của nhiều ứng dụng. –

Trả lời

8

Tôi có một máy 64 với SQL SERVER 64 bit (2k8 R2) và SQLCMD.EXE của tôi là trong c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE.

Nó cũng nằm trong đường dẫn.

Bạn chỉ có thể tìm kiếm con đường trực tiếp từ vị trí SQL Server Registry:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup\path 

Hoặc một biến thể về vấn đề này cho một phiên bản khác nhau.

Vấn đề lớn ở đây là SQLCMD là một phần của công cụ máy khách, không phải máy chủ SQL nên tôi cho rằng bạn không thể yêu cầu SQL Server cho bạn biết. Trừ khi tất nhiên bạn đang chạy trên máy chủ chính nó.

+1

SQL Server có thể được cài đặt vào một thư mục khác (như trên ổ D: hay cái gì đó) - vì vậy việc kiểm tra thư mục không phải là một cách đáng tin cậy ... bạn chắc chắn cần tìm thư mục 'Tools' từ registry trước. .. –

+0

Lưu ý rằng nếu bạn đang làm điều này trong C# và bạn sử dụng phương thức Registry.LocalMachine.OpenSubKey(), vị trí x86 sẽ được trả về trên máy chạy các cửa sổ 64 bit (ví dụ: C: \ Program Files (x86) \ ...). Bạn sẽ nhận được một "tập tin không tìm thấy" trong trường hợp này bởi vì SQL Server không cài đặt SQLCMD ở đó. Lưu ý rằng điều này chỉ áp dụng nếu ứng dụng của bạn là x86. –

+4

Cũng lưu ý, công cụ sql2012 cài đặt vào ..Microsoft SQL Server \ 110 \ Tools .. (nghĩa là không phải '100') và nó không được đưa vào đường dẫn nếu bạn cài đặt công cụ nhúng qua SqlCmdLnUtils.msi. Dường như không khôn ngoan để sử dụng khóa reg bao gồm số phiên bản cụ thể. Làm thế nào về HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SqlCmdLnUtils \ CurrentVersion? – PandaWood