2010-07-20 63 views
10

Tôi đã luôn dựa rất nhiều vào các phím tắt Windows tới SSMS bao gồm các công tắc dòng lệnh cho phép tôi nhanh chóng mở một cơ sở dữ liệu cụ thể trên một máy chủ cụ thể. Ví dụTại sao thiết bị chuyển mạch dòng lệnh SQL Server Management Studio 2008 ngừng hoạt động?

Ssms.exe -S 123.123.123.123 -U sa -P goodpassword -d DbName 

hoặc

Ssms.exe -S . -E -d DbName 

Những đột nhiên ngừng làm việc. Tôi nhận được lỗi này từ SSMS:

Failed to create new SQL Server script. 
Object reference not set to an instance of an object. (AppIDPackage) 
Program Location: at Microsoft.SqlServer.Management.UI.VSIntegration. 
AppIDPackage.AppIDPackage.OpenConnectionDialogWithGlobalConnectionInfo() 

Tôi vẫn có thể khởi chạy SSMS mà không cần thiết bị chuyển mạch dòng lệnh và sau đó thiết lập kết nối theo cách thủ công. Một số thiết bị chuyển mạch dòng lệnh vẫn hoạt động, ví dụ:

ssms.exe -nosplash 

hoạt động tốt.

Tôi gặp lỗi tương tự với bất kỳ kết hợp nào giữa các công tắc dòng lệnh -S, -E và -d. Nó không quan trọng nếu tôi chỉ đến một máy chủ hoặc cơ sở dữ liệu hợp lệ hay không, hoặc nếu thông tin đăng nhập của tôi là tốt hay không. Tôi có thể trỏ đến phiên bản cũ hơn của SSMS và nó hoạt động tốt, nhưng không phải là phiên bản 2008.

This post on MSDN's forums là tất cả những gì tôi đã tìm thấy trực tuyến, nhưng MS không hữu ích cho chủ đề này.

Bất kỳ ý tưởng nào về cách tôi có thể bắt đầu sửa lỗi này? Tôi làm việc với rất nhiều cơ sở dữ liệu khác nhau trên các máy chủ khác nhau và tôi thực sự dựa vào các lối tắt này.

Trả lời

7

Tôi đã ném DLL được đề cập ở phản xạ và mã được trả lại cho tôi ở cuối bài đăng này, thật đáng buồn là không có gì rõ ràng trong mã giúp bạn dễ dàng giải thích tại sao nó ngừng hoạt động cho bạn (nó sẽ không được tốt đẹp nếu Microsoft vận chuyển các biểu tượng gỡ lỗi với bất cứ điều gì họ sản xuất được viết chống lại CLR?). Bạn có thể thử theo các bước được liệt kê trong this question để xóa chúng và xem liệu giúp.

private void OpenConnectionDialogWithGlobalConnectionInfo() 
{ 
    if ((ServiceCache.GlobalConnectionInfo != null) && (ServiceCache.GlobalConnectionInfo.Count != 0)) 
    { 
     try 
     { 
      using (ConnectionDialog dialog = new ShellConnectionDialog()) 
      { 
       IDbConnection connection; 
       dialog.ImportRegisteredServersOnFirstLaunch = true; 
       dialog.AddServer(new SqlServerType()); 
       UIConnectionInfo connectInfo = ServiceCache.GlobalConnectionInfo[0].Copy(); 
       if (dialog.TryToConnect(this.PopupOwner, ref connectInfo, out connection) == DialogResult.OK) 
       { 
        this.ScriptFactory.CreateNewBlankScript(ScriptType.Sql, connectInfo, connection); 
       } 
      } 
     } 
     catch (Exception exception) 
     { 
      ExceptionMessageBox box = new ExceptionMessageBox(new ApplicationException(SRError.FailedToCreateNewSqlScript, exception)); 
      box.Caption = SRError.MessageBoxCaption; 
      box.Show(this.PopupOwner); 
     } 
    } 
    ServiceCache.GlobalConnectionInfo = null; 
} 
+2

Awesome - Tôi làm theo các liên kết đến các câu hỏi mà bạn đề cập, mà mang lại cho tôi vào thư mục này 'X: \ Users \ Herb Caudill \ AppData \ Roaming \ Microsoft \ Microsoft SQL Server \ 100 \ Công cụ \ Shell'. Tôi đã chuyển các tệp cài đặt và tùy chọn khác nhau ở đó sang một thư mục khác và có thể mở SSMS bình thường. Bằng cách chọn lọc thêm các tệp trở lại, tôi đã thu hẹp sự cố xuống tệp 'windows.prf', điều này dường như có thứ gì đó trong đó mà SSMS không thích. Tôi để cho nó tạo lại tập tin đó và tôi trở lại kinh doanh. Cảm ơn!! –

+0

Vui vì tôi có thể giúp đỡ, thành thật mà nói, tôi đã không mong đợi điều này để trả lời câu hỏi cho bạn, vẫn còn, weyhey! :) Refletor, nhưng một lần nữa, chứng minh giá trị của nó. – Rob

+0

@Rob và Herb, tôi không biết tại sao tôi bị cản trở với vấn đề này nhưng đối với tôi, khi tôi cố gắng đăng ký một máy chủ, tôi nhận được cùng một loại thông điệp nhưng với "Vị trí chương trình" được đặt thành Người đăng ký . Trong quá khứ tôi đã kết thúc gỡ cài đặt SSMS và cài đặt lại. Chúng ta đều biết có bao nhiêu niềm vui. Tôi đã sử dụng phương pháp Herbs và có thể xóa nó đi. Cảm ơn bạn đã tiết kiệm thời gian cho tôi. –

0

trình tốt như thế này:

sqlwb.exe -S . -E -d dbName 
+0

sqlwb.exe là SQL Server Management Studio 2005 - ssms.exe là 2008. Tôi đã cài đặt 2005 nhưng tôi muốn sử dụng 2008. –

0

Tôi đang sử dụng SSMS2008 chống lại một cơ sở dữ liệu SQL2005, và dòng lệnh SSMS hoạt động tốt ở đây.

Đây là thông tin phiên bản được sản xuất bởi SSMS Về thoại:

Microsoft SQL Server Management Studio    10.0.1600.22 ((SQL_PreRelease).080709-1414) 
Microsoft Data Access Components (MDAC)    6.0.6001.18000 (longhorn_rtm.080118-1840) 
Microsoft MSXML          2.6 3.0 5.0 6.0 
Microsoft Internet Explorer       8.0.6001.18813 
Microsoft .NET Framework       2.0.50727.3074 
Operating System         6.0.6001 

Có một số nguồn (MSSqlTips, và here) mà nêu các đối số dòng lệnh có sẵn trên sqlwb.exe. Tuy nhiên, trang Sách trực tuyến dành cho ssms nói rằng các tùy chọn có sẵn trên ssms.

+0

Điều cần biết là nó hoạt động cho bạn . Nó đã làm việc cho tôi cho đến gần đây.Theo MSDN http://MSDN.Microsoft.com/en-US/Library/ms162825.aspx các thiết bị chuyển mạch dòng lệnh tương tự sẽ làm việc cho ssms.exe như làm việc cho sqlwb.exe. –

+0

Đây là thông tin từ Về thoại của tôi: Microsoft SQL Server Management Studio \t \t \t \t \t \t 10.50.1600.1 Microsoft Data Access Components (MDAC) \t \t \t \t \t \t 6.1.7600.16385 Microsoft MSXML \t \t \t \t \t \t 3.0 4.0 5.0 6.0 Microsoft Internet Explorer \t \t \t \t \t \t 8.0.7600.16385 Microsoft .NET Hệ thống khung \t \t \t \t \t \t 2.0.50727.4927 hành \t \t \t \t \t \t 6.1.7600 –

1

Cửa sổ ObjectExplorer phải mở. Đừng giấu. Tôi đã giải quyết vấn đề của mình theo cách này :)

+0

Điều này sẽ giống như bình luận ... không trả lời trong một dòng. ;-) –

+0

Nếu câu trả lời đúng là 10 từ thì Câu trả lời là 10 từ. – Paul

Các vấn đề liên quan