Published:
07 Aug 2007
|
Abstract
Ameet Phadnis had to go through some trials and errors while building the SQL SP Generator software for his company. In this Article he explains how you can create Add-Ins for SQL Management Studio. |
|
by Ameet Phadnis
Feedback
|
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days):
73569/
159
|
|
|
Introduction |
My entire career I have been looking for ways to automate
the development process for developers. The urge to find new solutions might be
coming from my laziness to keep on doing the same stuff over and over again.
Around 4 years ago I had designed a way to create Stored Procedures on the SQL
Server database. You can find more information on the Stored Procedure
Generator by viewing my article titled Speed
up with SQL Stored Procedure Generator. But that process was too manual. I
had to keep in mind what kind of parameters I needed to pass to get the desired
results. Again, I was tired of that too. So, then I started thinking about writing
a Windows.NET program to resolve this issue.
By then Microsoft had released the SQL Server 2005. This
product included a GUI called SQL Server Management Studio (SSMS). The whole
idea behind SSMS was that it was based on Visual Studio 2005. So, I started
wondering whether I could write an Add-In as we do for Visual Studio 2005. I
was so wrong with this assumption. I did lot of research and most of them
pointed out, "Microsoft doesn't support SQL Server 2005 add-ins."
Then they came with an announcement that they would support it fully in SQL
Server 2008. So, I started digging more. My co-workers and I were determined to
write a Stored Procedure Generator Windows Application. But I was determined to
write a SQL 2005 add-in which would not require the user to enter the database
connection string. If any of the readers have used all the tools available for
SQL Stored Procedure Generators then you might have realized that you have to
enter the database connection string in order to get table information.
My perseverance paid off and one day I stumbled onto a code
on the web. I have not been able to find it any more. It was in a blog entry by
some Russian genius. But there was no code explanation. So, I had to do some
trial and error while we started coding for our SQL
SP Generator. So, here I am trying to explain the whole process on how you
can extend the functionality in SQL Management Studio with add-ins. Please keep
in mind that this applies only to SQL Server Management Studio 2005 and the
process might change with SQL Server Management Studio 2008.
|
Basic Concept |
The basic concept of the SSMS add-in is the same as Visual
Studio add-in. Before I get into the concept behind SSMS Add-In, I would like
to present some basic concepts of the Visual Studio Add-In.
The steps involved in creating the Visual Studio Add-In are:
Click on Create Project in Visual Studio 2005.
The template for Visual Studio 2005 Add-In is located under
Other Project Types->Extensibility->Visual Studio Add-In.
Figure 1
Please provide a name for the project.
The 6 step wizard will walk you through creating the Add-in.
Wizard Step 1: Select a Programming Language. You can select
your preferred language. For my project I will select Visual Basic.
Figure 2
Wizard Step 2: Select an application host. The options are
to create Microsoft Visual Studio 2005, Microsoft Visual Studio 2005 Macros or
both. The basic idea is whether you want to create an Add-In or a Macro. Keep
in mind the Macros can be converted to an Add-In.
Figure 3
Wizard Step 3: Enter a Name and Description. You can provide
a unique name and description for the add-in.
Figure 4
Wizard Step 4: Choose Add-In Options. The options are
whether to create command bar UI or Add-In when the host application starts and
the add-in will never put up modal UI. The options are self explanatory.
Figure 5
Wizard Step 5: Choosing "Help About" Information.
If you want to have your company's information in he About box then you can
select this option.
Figure 6
Wizard Step 6: Summary. This will just provide the options
you have selected. On clicking finish the wizard will create the project for
you.
Figure 7
Please note that the Wizard has created a class called
connect which implements IDTEExtensibility2. I will explain the connect class
in a little bit.
Also, take a look at the References tab and you will notice
the following references have been added:
EnvDTE
EnvDTE80
Extensibility
All the above steps are also the same steps for creating an
add-in for SSMS.
|
Assemblies for SSMS |
The .NET platform or any product comes with tons and tons of
assemblies. Some of the assemblies are stored with the product exe. The first
task while writing the add-in is to determine the assemblies we will need. The
assembly information (as per my knowledge) is not documented anywhere on the
Microsoft website. You will have to do plenty of trial and error to find the
exact solution that might work for you. The assemblies required for SSMS are
located under
C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies\
AND
C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\
Please note the assembly locations can be guessed looking at
the folder structure. Anything related to IDE will be located under C:\Program
Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\.
Based on your requirement needs, you will have to do some
research to find the assemblies that are required for your application.
In order to use SQL Management Objects (SMO) we need to include
the following assemblies: Microsoft.sqlServer.ConnectionInfo and
Microsoft.sqlServer.RegSvrEnum.
SMO are objects designed for programmatic management of
Microsoft SQL Server. You can use SMO to build customized SQL Server Management
applications.
As we were working on an Add-In which would be accessed by
right clicking on the database or table name in the object explorer, we had to
find the assembly which would allow us to do that. That is when we found the
use of an assembly called objectexplorer.
In our product, I was also looking forward to displaying the
stored procedure in a new Query Window. So, I found out that I could reference
the following assemblies to do that:
Microsoft.sqlserver.sqltools.VSIntegration
sqlWorkbench.Interfaces
Also, if your add-in will be displaying some windows model
forms then you might have to include System.Windows.Forms.
The assembly references will totally depend on your
application.
|
Implementing IDTExtensibility2 |
As mentioned earlier, the add-in creates a class that
implements IDTExtensibility2. In this section we will discuss some of the
methods that need to be implemented in the class. The methods that need to be
implemented are:
OnConnection - Receives notification that the Add-in is
being loaded. The parameters are:
Application - The Root object of the host
application
connectMode - How the add-in is loaded
addInInst - Represents the Add-In
OnDisconnection - As the name suggests, the Add-in is being
unloaded. The parameters are:
disconnectMode - How the add-In is unloaded
Custom - Array of parameters specific for the host
application
OnAddInsUpdate - Receives notification that the collection
of Add-Ins has changed. Parameters are:
Custom - Array of parameters specific to the host
application
OnStartupcomplete - Receives notification that the host
application has completed loading. Parameters are:
Custom - Array of parameters specific to the host
application
OnBeginShutdown - Receives notification that the host
application is being unloaded.
Custom - Array of parameters specific to the host
application.
For our application we are mainly concerned with
OnConnection. For SSMS add-in we will write our code in the OnConnection
method. As we were writing the Add-In for recognizing the database object or
table object we needed to have an event handler that would recognize the object
that was selected. So, we wrote an event handler called OnSelectionChanged.
This event handler was provided to handle the IObjectExplorerEventProvider's
SelectionChanged event. So, now our code for OnConnection looks like:
Listing 1
_ApplicationObject = Ctype(Application, DTE2)
_addInInstance = Ctype(AddINInst, AddIn)
_ObjectExplorer = ServiceCache.GetObjectExplorer
Dim typeOfProvider as Type = GetType(IObjectExplorerEventProvider)
Dim provider as IObjectExplorerEventProvider = _
Ctype(ObjectExplorer.GetService(typeOfProvider), IObjectExplorerEventProvider)
AddHandler provider.SelectionChanged, AddressOf OnSelectionChanged
The _ApplicationObject, _addInINstance, _ObjectExplorer are
declared in the class as follows:
Listing 2
Private _ApplicationObject as DTE2
Friend _addINInstance as AddIn
Private _ObjectExplorer as IObjectExplorerService
In our SQL SP Generator application, we have declared
another class called SQLObjectNode. The scope of this class is Friend. So, we
can call the functions through the SelectionChanged event handler that is
declared in the Connect class. The SelectionEventHandler code looks like:
Listing 3
Dim objSQLDBNode as SQLObjectNode = SQLObjectNode.GetInstanceOnSelection(Me)
This is all we need to do on this class. This class just
implements the IDTExtensibility2 and lets the application know what to do in
it.
|
Context Menu Addition Class |
The above class that implemented IDTExtensibility2
instructed the host application to go to the GetInstanceOnSelection method under
the SQLObjectNode object. Now we need to instruct the application to add visual
items to certain objects. In our SQL SP Generator application we wanted it to
be added to the Database object or Table Object. We also need to make sure the
context menu is added only once to the object. The following code is
implemented in GetInstanceOnSelection.
Listing 4
Friend Shared Function GetInstanceOnSelection( _
ByVal objSQLServer2005AddIn As SQLServer2005AddIn) As SQLObjectNode
Dim node As INodeInformation
Dim sz As Int16
Dim selNodes() As INodeInformation
objSQLServer2005AddIn.ObjectExplorer.GetSelectedNodes(sz, selNodes)
If sz > 0 Then
node = selNodes(0)
If Not node Is Nothing Then
Dim context As String = node.Context
Dim tnode As SQLObjectNode
If (objSQLServer2005AddIn._objNodesDict.ContainsKey(context)) Then
tnode = objSQLServer2005AddIn._objNodesDict(context)
Else
tnode = New SQLObjectNode(node, objSQLServer2005AddIn)
objSQLServer2005AddIn._objNodesDict.Add(context, tnode)
End If
Return tnode
End If
End If
Return Nothing
End Function
In the above example, in order to get a handle on the
selected object node, you use the following method.
Listing 5
objSQLServer2005AddIn.ObjectExplorer.GetSelectedNodes(sz, selNodes)
The SelNodes is passed as a reference. This is an array of
the type
Microsoft.SQLServer.Management.UI.VSIntegration.ObjectExplorer.INodeInformation.
So, if the user has selected the database Northwind under
the object explorer then the selNodes will contain reference to that object.
The remaining code checks whether the context key was
already added to the dictionary. If not then we create the SQLObjectNode object
and add the context key to the dictionary. When the code creates a new
SQLObjectNode using - tnode = New SQLObjectNode(node, objSQLServer2005AddIn) it
calls the constructor event for the object. The constructor event looks like:
Listing 6
Private Sub New(ByVal node As INodeInformation, _
ByVal objSQLServer2005AddIn As SQLServer2005AddIn)
Me._objSQLServer2005AddIn = objSQLServer2005AddIn
If node Is Nothing Then
_isTable = False
Else
Dim context As String = node.Context
If context.Contains("Server[@Name='") AndAlso _
context.Contains("']/Database[@Name='") AndAlso _
context.Contains("/Table[@Name") AndAlso _
context.Contains("@Schema") AndAlso _
node("Name") IsNot Nothing AndAlso _
node("Schema") IsNot Nothing AndAlso _
node("Name").ToString().Trim() <> "" AndAlso _
node("Schema").ToString().Trim() <> "" Then
_isTable = True
_isDB = False
ElseIf context.Contains("Server[@Name='") AndAlso _
context.Contains("']/Database[@Name='") AndAlso _
node("Name") IsNot Nothing AndAlso _
node("Name").ToString().Trim() <> "" Then
_isDB = True
_isTable = False
End If
End If
If _isTable Then
_name = node("Name").ToString()
_schema = node("Schema").ToString()
_database = node.Parent.Name
_cnnStr = "Database=" + database + ";" + node.Connection.ConnectionString
If Not objSQLServer2005AddIn.TableMenuRegistered Then
AddMenuItems(CType(node.GetService(GetType(IMenuHandler)), _
IMenuHandler), True)
objSQLServer2005AddIn.TableMenuRegistered = True
End If
ElseIf _isDB Then
_name = node("Name").ToString
_database = _name
_cnnStr = "Database=" + database + ";" + node.Connection.ConnectionString
If Not objSQLServer2005AddIn.DBMenuRegistered Then
AddMenuItems(CType(node.GetService(GetType(IMenuHandler)), _
IMenuHandler), False)
objSQLServer2005AddIn.DBMenuRegistered = True
End If
End If
End Sub
The above example just looks at whether the node context is
a table or database. The way it figures it out is by looking at the text in
node.context. If the database object is selected then the node.context will
look something like: "Server[@Name='ETGPHADNIS\SQL2005']/Database[@Name='SQLReportApplication']."
In this example I have selected the database object SQLReportApplication.
If the table object is selected then the node.context will
look something like:
"Server[@Name='ETGPHADNIS\SQL2005']/Database[@Name='SQLReportApplication']/
Table[@Name='tblApplication' and @Schema='dbo']."
In this example I have selected the table called
tblApplication under the SQLReportApplication database.
You can experiment with the other objects using the above
example. Now we need to finally add the menu item to those objects. The
following code will assist you in adding your menu item.
Listing 7
Dim objMenuItem As New SPGeneratorMenu(objSQLServer2005AddIn)
objMenuItem.Text = strItemName
Try
Dim testing As HierarchyObject = DirectCast(menuItemHandler, HierarchyObject)
testing.AddChild(strItemName, objMenuItem)
Catch ex As Exception
Throw ex
End Try
In the above code I am instantiating my object which has all
the business rules for creating the Stored Procedures. I assign the Text
property to the name that should appear on the menu item. After that I get a
handle to the context menu object for the selected node and add my own menu
item to it. In this section we saw how a menu item can be added to the objects
context menu.
|
The Menu class to perform actions |
This is the final class that you will need to actually
perform the desired action. This menu item class is inherited from the
ToolsMenuItemBase. In the previous section you saw how we added the
SPGeneratorMenu object to the context menu. The SPGeneratorMenu class has been
inherited from ToolsMenuItemBase. The only method that needs to be overridden
is Invoke. The code for invoke in our scenario is below.
Listing 8
Dim tnode As SQLObjectNode = _
SQLObjectNode.GetInstanceOnSelectedNode(_objSQLServer2005AddIn)
If Not tnode Is Nothing Then
Dim frmGenerator As frmSPGenerator
Try
If tnode.IsDB Then
frmGenerator = New frmSPGenerator(tnode.cnnStr, tnode.database, _
False, _objSQLServer2005AddIn)
Else
frmGenerator = New frmSPGenerator(tnode.cnnStr, tnode.Name, _
True, _objSQLServer2005AddIn)
End If
frmGenerator.ShowDialog()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
frmGenerator = Nothing
If Not sw Is Nothing Then
sw.Dispose()
sw = Nothing
End If
End Try
End If
The above code only displays the frmSPGenerator form which
is a Wizard to create Stored Procedures.
|
Copying the contents to New Query Window |
The above sections explained how you could add a context
menu and perform the desired operation. In a real life scenario, most of the
times you will need to interact with the editor of the SSMS. In our SQL SP
Generator we had to create the stored procedures and then copy those stored
procedures to the Query Window. Even though it sounds real complex, it is not
that complex at all. In order to create a new Query Window, you just need to do
the following.
Listing 9
Dim scriptFactory As Editors.IScriptFactory = ServiceCache.ScriptFactory
scriptFactory.CreateNewBlankScript(Editors.ScriptType.Sql, _
scriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo, Nothing)
The above code will create a new blank query document for
you. Now you can use the VS.NET objects to control the context in this query
window. You will be utilizing the EnvDTE.TextDocument class. So, my complete
code looks like:
Listing 10
Dim objEnvDocument As EnvDTE.Document
Dim objTextDocument As EnvDTE.TextDocument
Dim objEndPoint As EnvDTE.EditPoint
Dim objDBProcedures As New DBProcedures
Dim scriptFactory As Editors.IScriptFactory = ServiceCache.ScriptFactory
scriptFactory.CreateNewBlankScript(Editors.ScriptType.Sql, _
scriptFactory.CurrentlyActiveWndConnectionInfo.UIConnectionInfo, Nothing)
objEnvDocument = _objSQLServer2005AddIn.ApplicationObject.ActiveDocument
objTextDocument = objEnvDocument.Object()
objEndPoint = objTextDocument.EndPoint.CreateEditPoint
objEndPoint.Insert(objDBProcedures.GetCopyrightComments)
objEndPoint.Insert(objDBProcedures.GetDisclaimer)
objEnvDocument = _objSQLServer2005AddIn.ApplicationObject.ActiveDocument
objTextDocument = objEnvDocument.Object()
objEndPoint = objTextDocument.EndPoint.CreateEditPoint
objEndPoint.Insert(strProcedure.ToString)
The Insert method will push all the text you need to the
current active document starting at the EditPOint you created.
|
Debugging |
None of the programmers are perfect and sometimes you do
need to debug the code to find out about those small creatures that cause your
applications to fail. So, how do we set up this application for debugging? It
is pretty simple. Just go into Project->Properties and set the Start Action
to Start External program and point it to C:\Program Files\Microsoft SQL
Server\90\Tools\Binn\VSShell\Common7\IDE\SqlWb.exe.
Figure 8
|
Registry |
Wow! We have come a long way on creating an add-in and you
must be excited to see how it works. But actually it is disappointing to see
that it does not work yet. The reason being you have to make some registry
entries to make this application work. The registry entry needs to be made in
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Microsoft SQL Server\90\Tools\Shell\Addins\<your Add-in
class>.
My registry entry looks like the figure below.
Figure 9
|
Setup Package |
You can create a setup package for your add-in the same way
you create setup packages for your other applications. Make sure that you
exclude the assemblies that are part of the SSMS. Also, you can use the Setup
Package's registry window to define the registry entry you want. The Setup
package explanation is beyond the scope of this article.
|
References |
|
Summary |
In this article I have tried to explain most of the
information that is needed to build an Add-In for your SSMS. Things might
change with SQL 2008 or it might remain the same. The assemblies might change a
little bit and there will be some support provided by Microsoft for the
add-ins. There are various daily tasks that you can automate or provide a
better way then what is provided by SSMS. You just need to visualize your tool and
keep on looking for ways to code it and implement it.
|
|
|
User Comments
Title:
How to Add 3rd Party software in SQL Management Studio
Name:
Nilesh Gambhava
Date:
2011-11-05 11:01:41 PM
Comment:
I am using Tools4SQL Stored Procedure Generator. Every time I have to open it separately and work on it. Can I add it to SQL Server Management Studio some how so that I can work together?
|
Title:
ServiceCache not available in SSMS R2
Name:
Santiago Perez
Date:
2011-09-15 3:54:42 PM
Comment:
I understand that ServiceCache is no longer available in SSMS 2008 R2. Can you please explain an alternative approach/objects(s) for this environment?
Thanks
|
Title:
Setup Package Explaination
Name:
Rob
Date:
2011-08-08 9:12:50 AM
Comment:
I need to build a setup package using WiX. Does anybody know how the setup actually works so that I can replicate it in wix?
|
Title:
source code?
Name:
George
Date:
2010-09-20 10:32:35 AM
Comment:
when I follow up the code, I got error: 'Getservice' is not a member of 'ObjectExplorer', any idea? many thanks.
|
Title:
SQL Server 2005 Add In
Name:
Yatin
Date:
2009-11-13 6:22:13 AM
Comment:
Article is great but can i have this article examples in C#.NET instead of VB.NET ? My Email ID : yatin_patadiya@yahoo.co.in
|
Title:
SQLServer2005AddIn object
Name:
Aziz Kapadia
Date:
2009-09-08 3:02:01 AM
Comment:
Hi Ameet,
Nice article, how ever I could not find object SQLServer2005AddIn any where. Can you please help me out?
|
Title:
sql formatter add-on for SSMS
Name:
James
Date:
2009-07-31 3:10:01 AM
Comment:
Hi Ameet,
Thanks for your nice article, I have created a sql formatter add-on for SSMS after reading your article, it's really very helpful. You may have a try of it here: http://www.dpriver.com/sqlpp/ssmsaddin.html
Let me know if you need a license to use it in your daily work.
--James Free Online SQL Formatter: http://www.dpriver.com/pp/sqlformat.htm
|
Title:
RegAsm addin.dll issue
Name:
maco
Date:
2009-07-24 10:52:47 PM
Comment:
Hi All, I have a strange problem on regasm registration. based on special requirement, I need to let the add-in registered by administrator and used by other desk users.The problem is only administrator can use the SSMS add-in successfully, failed to other desk users.
if SSMS build the userprofile for each user? how to deal with this issue?
any help will be appreciated.
urs mareinke
|
Title:
Sql server management studio express
Name:
Angel
Date:
2009-03-26 5:49:25 AM
Comment:
hi, i downloaded SSMS 2005 from microsoft site. Also i am reading it's online tutorial provided my microsoft. Now,I am in trouble tutorial says something and SSMS says something. viz.,i could not get File > New > New Project (i could not get new project) and Solution Explorar. Prior to it I have installed MXML6 and Visual Studio 2005, and Sql server express edition.
what should i do now. If anybody have anysolution or have the set of SSMS05 that have both Solution Explorar and New Projects then pls. send me the link at my emai id.
angel_is_yours@ymail.com
|
Title:
Relgolook , archival, SME, email management, Information Management, Social Network, SaaS, SOA
Name:
vahila
Date:
2009-03-05 6:03:16 AM
Comment:
Relgolook is a productivity application for outlook users. Archival and email management for organizing and archiving relationships. Managed service provides online referral campaigns, online surveys, online polls, online test.
|
Title:
Register for COM Interop
Name:
Charles Rex
Date:
2008-09-21 5:41:27 PM
Comment:
Hello,
The add-in must be registered before it can be used
regasm MyAddIn1.dll /codebase
or click project's Properties option from the Project menu, select the Build (C#) or Compile (VB.NET) page, and select the Register for COM Interop check box
|
Title:
Quick Questions
Name:
Alex
Date:
2008-07-22 2:17:40 PM
Comment:
How can i get the text and/or selected text from the active window. I need to retrieve the code that was executed
|
Title:
Really hepful
Name:
Viktar Karpach
Date:
2008-04-15 11:29:13 PM
Comment:
I want to create addin for object browser, so it would have better filtering possibilities.
|
Title:
Tanks
Name:
Harjit Singh
Date:
2008-04-10 2:07:38 AM
Comment:
I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.
When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item. And I want to get the existing menu item in the context menu. So I convert it to IWinformsMenuHandler. And use GetMenuItems() supplied by IWinformsMenuHandler, this function will return IList [INavigableItem]. Things go well by now.
|
Title:
subkriskat
Name:
subkriskat
Date:
2008-03-21 10:48:26 AM
Comment:
This is a very good article ,which customizing my sql . But ,where can i get the reference for the SQLServer2005AddIn & SQLObjectNode Thanks in advance
|
Title:
A question about IMenuHandler
Name:
Daliang Zhang
Date:
2007-11-04 10:06:00 PM
Comment:
A question about IMenuHandler
Hi Ameet
I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.
When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item. And I want to get the existing menu item in the context menu. So I convert it to IWinformsMenuHandler. And use GetMenuItems() supplied by IWinformsMenuHandler, this function will return IList [INavigableItem]. Things go well by now.
But when I try to enumerate menu items in IList, I found a weird thing. For example, I click a stored procedure node for the first time, GetMenuItems() return a IList with count equals to 1, but there should be about 12 menu items in the context menu; then I click another stored procedure node, GetMenuItems() return a IList with count equals to the correct menu items count. I don't know why. Anyway, since I get those menu items, I try to do some modification on them. So I try to modify the text of a menu item, try to disable a menu item, but all failed. there is no change when the context menu popup.
Have you ever seen this issue, could you share with my your experience, thanks in advance.
Daliang Zhang Best Regards mail:zdliang1981@gmail.com
|
Title:
A question about IMenuHandler
Name:
Daliang Zhang
Date:
2007-11-04 10:04:28 PM
Comment:
When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item.
|
Title:
A question about IMenuHandler
Name:
Daliang Zhang
Date:
2007-11-04 10:02:21 PM
Comment:
Hi Ameet
I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.
|
Title:
For Sam and Mark
Name:
A
Date:
2007-10-24 11:36:13 AM
Comment:
If you notice the registry entry already is mentioned in the sections for Registry. Also the debugging explains how you can setup the application for debugging.
Thanks
|
Title:
Additional info that may help others
Name:
Mark
Date:
2007-10-24 10:54:13 AM
Comment:
\ \ \ \ \ \ \ \
|
Title:
Thanks; but Results To?
Name:
Daniel Macey
Date:
2007-10-20 11:13:58 PM
Comment:
Good to find someone has written about this.
Thanks!
I wanted to provide my own output option (Results To) but by the looks of SQLEditors.dll and the Microsoft.SqlServer.Management.QueryExecution namespace it is impossible.
Any comment on what I am trying to do would be appreciated.
|
Title:
Great Article
Name:
Sam
Date:
2007-09-11 9:11:35 PM
Comment:
Hi, I hope you can shine some light on this. I am interested in debugging my add-in. in the mean time, i am not able to debug. I noticed my add in is never been loaded. Do i need to do the extra step by adding a register entry. P.S I don't have the AddIn folder there, but i could create it. (I am using Management Studio Express).
Thanks,
|
Title:
SQLServer2005AddIn?
Name:
kkam
Date:
2007-08-23 9:28:42 PM
Comment:
Hi, I'm trying to follow your article and code samples to give me a start on my first SSMS add-in. In Listing 4 you define your incomming parameter as "SQLServer2005AddIn". What am I missing...I can't see where that comes from.
Thanks.
|
Title:
Good Job!
Name:
Kelly
Date:
2007-08-08 6:51:44 AM
Comment:
You rock,Ameet -- nice job!
|
Title:
Wow
Name:
W
Date:
2007-08-07 4:56:41 PM
Comment:
The SQL SP Generator you guys developed works great.
Thanks
|
Title:
Extend Functionality in SQL Server 2005 Management Studio with Add-ins
Name:
T
Date:
2007-08-07 3:32:02 PM
Comment:
What class are you looking for? Check the Context Menu Addition Class The Menu class to perform actions sections to get more information.
The author has just put down the basics. They won't reveal the code as they own the code. Most of the stuff is given in the article itself.
|
Title:
Extend Functionality in SQL Server 2005 Management Studio with Add-ins
Name:
Hiren
Date:
2007-08-07 3:10:52 PM
Comment:
I was really interested to know about SQL 2005 extenbility, but it would help more clear if you explain more about creating class that have been used in this sample.
|
Title:
Extend Functionality in SQL Server 2005 Management Studio with Add-ins
Name:
Sanket Terdal
Date:
2007-08-07 9:48:26 AM
Comment:
Very nice article.The step by step demo makes it easier to understand.
|
|
|
|