欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

How To : Create SQL Server Management Studio

系統 2033 0

原文? How To : Create SQL Server Management Studio Addin

Read the full and original article from Jon Sayce? Here

In the last post I talked about? How To: Create Windows Live Messenger Addin

Now let’s create SQL Server Management Studio Addin.

Start:

Let’s open Visual Studio and create a new Visual Studio Add-in project.

Step1

Check the right options for your Addin.

step3

After you finish the wizard please add new Setup project.

step4

Add Project output? -> Primary output and change the output group registration to? vsdrpCOM

step5

Enter to Registry Editor and add your Addin to SSMS startup.

step6 ?

?

References

There’s extensive? documentation ?on MSDN regarding Visual Studio’s EnvDTE object model, which is at the heart of Visual Studio add-in development, and most of this applies to SSMS. Most UI elements are the same for both environments but if your add-in relates to anything SQL-specific then you’re going to need references to SSMS assemblies and the documentation on these is non-existent.

IDTExtensibility2 Events

Once you’ve got the references sorted out, you’re ready to start coding.

The template class that Visual Studio has created implements the? IDTExtensibility2 ?interface, but only one of the methods has any code in it so far: OnConnection.

OnConnection “occurs whenever an add-in is loaded into Visual Studio”? according to MSDN ?– in our case the event will fire whenever you start SSMS, once the add-in is installed.

OnConnection will probably be the most important method of the interface for your add-in, but the others can be useful if you need to save settings as the add-in is unloaded or something similar.

SSMS Events

Handling SSMS events is one of the trickier aspects of writing the add-in, the problem being that you don’t know what events there are to handle. I suspect Reflector could help here, but the method I used was suggested by Sean.

To add a handler to an event we need to know the command to which that event belongs. The easiest way to find this is to loop through the commands and look for the name which sounds most like what you’re after.

    
      For 
      
        Each com 
        
          As Command 
          
            In _DTE.Commands Debug.WriteLine(
            
              String.Format(
              
                "Name={0} | GUID={1} | ID={2}", com.Name, com.Guid, com.ID)) Next
              
            
          
        
      
    
  

Now we complete our Addin infrastructure we can start writing some code!!!

Edit Connect.vb and add a MessageBox inside? OnStartupComplete ?method.

image

Build the project and install the Addin, open SSMS and this is what you should see.

step7

Add New Menu Item

Under Connect Class change to :
Implements the constructor for the Add-in object

        Implements IDTExtensibility2
      
        Implements IDTCommandTarget
      
        ?
      
        Private _DTE2 As DTE2
      
        Private _DTE As DTE
      
        Private _addInInstance As AddIn
      
        ?
      
        Private _CommandEvents As CommandEvents
      
        ?
      
        Private _CommandBarControl As CommandBarControl
      
        ?
      
        Private Const COMMAND_NAME As String = "MySSMSAddinCommand"
      

OnConnection Method:
get the events for the command we’re interested in (the GUID comes from the output of the previous debug command)
? NOTE: ? if the _CommandEvents object goes out of scope then the handler will not longer be attached to the event, so it must be a private class-level declaration rather than a local one.

        Public Sub OnConnection(ByVal application As Object, ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef custom As Array) Implements IDTExtensibility2.OnConnection
      
               _DTE2 = CType(application, DTE2)
      
               _DTE = CType(application, DTE)
      
               _addInInstance = CType(addInInst, AddIn)
      
        ?
      
               _CommandEvents = _DTE.Events.CommandEvents("{84125960-B63C-3794-B5D3-9BC47A513E8D}", 1)
      
           End Sub
      

OnDisconnection Method: - ?
Checks whether the control in the tools menu is there if so delete the menu item.

        Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection
      
                Try
      
                    If Not (_CommandBarControl Is Nothing) Then
      
                        _CommandBarControl.Delete()
      
                    End If
      
                Catch
      
                End Try
      
            End Sub
      

QueryStatus Method:
called when the command’s availability is updated

        Public Sub QueryStatus(ByVal commandName As String, ByVal neededText As vsCommandStatusTextWanted, ByRef status As vsCommandStatus, ByRef commandText As Object) Implements IDTCommandTarget.QueryStatus
      
               If neededText = vsCommandStatusTextWanted.vsCommandStatusTextWantedNone Then
      
                   If commandName = _addInInstance.ProgID & "." & COMMAND_NAME Then
      
                       status = CType(vsCommandStatus.vsCommandStatusEnabled + vsCommandStatus.vsCommandStatusSupported, vsCommandStatus)
      
                   Else
      
                       status = vsCommandStatus.vsCommandStatusUnsupported
      
                   End If
      
               End If
      
           End Sub
      

OnStartupComplete Method:

        Public Sub OnStartupComplete(ByRef custom As Array) Implements IDTExtensibility2.OnStartupComplete
      
                Dim myCommand As Command = Nothing
      
        ?
      
                ' -----------------------------------
      
                ' 1. Check whether the command exists
      
                ' -----------------------------------
      
        ?
      
                ' try to retrieve the command, in case it was already created
      
                Try
      
                    myCommand = _DTE.Commands.Item(_addInInstance.ProgID & "." & COMMAND_NAME)
      
                Catch
      
                    ' this just means the command wasn't found
      
                End Try
      
        ?
      
                ' ----------------------------------
      
                ' 2. Create the command if necessary
      
                ' ----------------------------------
      
        ?
      
                If myCommand Is Nothing Then
      
                    myCommand = _DTE.Commands.AddNamedCommand(_addInInstance, COMMAND_NAME, "MySSMSAddin MenuItem", "Tooltip for your command", True, 0, Nothing, vsCommandStatus.vsCommandStatusSupported Or vsCommandStatus.vsCommandStatusEnabled)
      
                End If
      
        ?
      
                ' ------------------------------------------------------------------------------------
      
                ' 3. Get the name of the tools menu (may not be called "Tools" if we're not in English
      
                ' ------------------------------------------------------------------------------------
      
        ?
      
                Dim toolsMenuName As String
      
                Try
      
        ?
      
                    ' If you would like to move the command to a different menu, change the word "Tools" to the 
      
                    ' English version of the menu. This code will take the culture, append on the name of the menu
      
                    ' then add the command to that menu. You can find a list of all the top-level menus in the file
      
                    ' CommandBar.resx.
      
                    Dim resourceManager As System.Resources.ResourceManager = New System.Resources.ResourceManager("MySSMSAddin.CommandBar", System.Reflection.Assembly.GetExecutingAssembly())
      
        ?
      
                    Dim cultureInfo As System.Globalization.CultureInfo = New System.Globalization.CultureInfo(_DTE2.LocaleID)
      
                    toolsMenuName = resourceManager.GetString(String.Concat(cultureInfo.TwoLetterISOLanguageName, "Tools"))
      
        ?
      
                Catch e As Exception
      
                    'We tried to find a localized version of the word Tools, but one was not found.
      
                    '  Default to the en-US word, which may work for the current culture.
      
                    toolsMenuName = "Tools"
      
                End Try
      
        ?
      
                ' ---------------------
      
                ' 4. Get the Tools menu
      
                ' ---------------------
      
        ?
      
                Dim commandBars As CommandBars = DirectCast(_DTE.CommandBars, CommandBars)
      
                Dim toolsCommandBar As CommandBar = commandBars.Item(toolsMenuName)
      
        ?
      
                ' -------------------------------------------------
      
                ' 5. Create the command bar control for the command
      
                ' -------------------------------------------------
      
        ?
      
                Try
      
                    'Find the appropriate command bar on the MenuBar command bar:
      
                    _CommandBarControl = DirectCast(myCommand.AddControl(toolsCommandBar, toolsCommandBar.Controls.Count + 1), CommandBarControl)
      
                    _CommandBarControl.Caption = "MySSMSAddin"
      
                Catch argumentException As System.ArgumentException
      
                    'If we are here, then the exception is probably because a command with that name
      
                    '  already exists. If so there is no need to recreate the command and we can 
      
                    '  safely ignore the exception.
      
                End Try
      
            End Sub
      

?

Build and Install

step8

Add New Window

Let’s make our menu item a functioning menu item.?
First add new UserControl to the project

image

Modify the UserControl to your needs.

Add this code into Exec Method in Connect.vb
Define a new window as container for the UserControl.

        Public Sub Exec(ByVal commandName As String, ByVal executeOption As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec
      
            handled = False
      
            If executeOption = vsCommandExecOption.vsCommandExecOptionDoDefault Then
      
                If commandName = _addInInstance.ProgID & "." & COMMAND_NAME Then
      
        ?
      
                    ' get windows2 interface
      
                    Dim MyWindow As Windows2 = CType(_DTE2.Windows, Windows2)
      
        ?
      
                    ' get current assembly
      
                    Dim asm As Assembly = System.Reflection.Assembly.GetExecutingAssembly
      
        ?
      
                    ' create the window
      
                    Dim MyControl As Object = Nothing
      
                    Dim toolWindow As Window = MyWindow.CreateToolWindow2(_addInInstance, asm.Location, "MySSMSAddin.MyAddinWindow", "MySMSAddin Window", "{5B7F8C1C-65B9-2aca-1Ac3-12AcBbAF21d5}", MyControl)
      
                    toolWindow.Visible = True
      
        ?
      
                    handled = True
      
        ?
      
                End If
      
            End If
      
        End Sub
      

?

image

image ?

Download MySSMSAddin Project

How To : Create SQL Server Management Studio Addin


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 好吊在线视频 | 看片在线观看 | 日韩久久成人 | 中文一区 | 日韩在线观看网站 | 午夜色a大片在线观看免费 龙珠z在线观看 | 欧美精品一区二区三区在线 | 婷婷丁香综合 | 日本粉嫩一区二区三区视频 | 久久久成人精品视频 | 91偷拍精品一区二区三区 | 国产精品久久自在自2021 | 精品一区二区电影 | www.夜夜骑.com | 亚洲欧美中文日韩在线 | 99久久亚洲精品日本无码 | 日韩二三区 | 日本人妖miran护士 | 波多野结衣手机在线播放 | 国产91在线免费 | 色综合一区 | 嫩草影院在线观看网站成人 | 新版天堂资源中文在线 | 99国产欧美久久精品 | 国产精品久久久久久久久免费相片 | 欧美视频www| 99久久精彩视频 | 国产成人久久婷婷精品流白浆 | 欧美国产日本高清不卡 | 香港三级台湾三级在线播放徐 | 国产一级在线看 | 欧美日韩国产一区二区三区伦 | 国产精品午夜电影 | www.天天操| 成人不卡 | 91视频苹果版 | 国产欧美视频在线观看 | 亚洲美女视频 | 奇米影视色 | 亚洲综合影院 | 亚洲欧美视频一区 |