Microsoft has recently released the final version of the
Issue Tracker Starter Kit. The kit was built using asp.net and allows projects to track outstanding issues. I know there are much better solutions out there but you can't beat the price (free). Since I have been using the Issue Tracker Starter Kit when it was in beta and I needed to move my current project data to the new issue tracker database. Luckily for me no data structure changes were made so that made my SQL script really simple. If you need to use this script replace IssueTrackerOld with the name of your old Issue Tracker database and execute.
SET IDENTITY_INSERT issueTracker_Users ON
INSERT INTO issueTracker_Users (UserId, UserName, UserPassword, RoleId, Email, DisplayName)
SELECT UserId, UserName, UserPassword, RoleId, Email, DisplayName FROM IssueTrackerOld..issueTracker_Users
SET IDENTITY_INSERT issueTracker_Users OFF
SET IDENTITY_INSERT issueTracker_projects ON
INSERT INTO issueTracker_projects (ProjectId, ProjectName, ProjectDescription, ProjectCreatorId, ProjectManagerId, ProjectCreationDate, ProjectDisabled)
SELECT ProjectId, ProjectName, ProjectDescription, ProjectCreatorId, ProjectManagerId, ProjectCreationDate, ProjectDisabled FROM IssueTrackerOld..issueTracker_projects
SET IDENTITY_INSERT issueTracker_projects OFF
SET IDENTITY_INSERT issueTracker_projectStatus ON
INSERT INTO issueTracker_projectStatus (StatusId, ProjectId, StatusName, StatusImageUrl, DateCreated)
SELECT StatusId, ProjectId, StatusName, StatusImageUrl, DateCreated FROM IssueTrackerOld..issueTracker_projectStatus
SET IDENTITY_INSERT issueTracker_projectStatus OFF
SET IDENTITY_INSERT issueTracker_projectPriorities ON
INSERT INTO issueTracker_projectPriorities(PriorityId, ProjectId, PriorityName, PriorityImageUrl, DateCreated)
SELECT PriorityId, ProjectId, PriorityName, PriorityImageUrl, DateCreated FROM IssueTrackerOld..issueTracker_projectPriorities
SET IDENTITY_INSERT issueTracker_projectPriorities OFF
SET IDENTITY_INSERT issueTracker_projectMilestones ON
INSERT INTO issueTracker_projectMilestones(MilestoneId, ProjectId, MilestoneName, MilestoneImageUrl, DateCreated)
SELECT * FROM IssueTrackerOld..issueTracker_projectMilestones
SET IDENTITY_INSERT issueTracker_projectMilestones OFF
INSERT INTO issueTracker_projectMembers (UserId, ProjectId)
SELECT UserId, ProjectId FROM IssueTrackerOld..issueTracker_projectMembers
SET IDENTITY_INSERT issueTracker_projectCustomFields ON
INSERT INTO issueTracker_projectCustomFields(CustomFieldId, ProjectId, CustomFieldName, CustomFieldRequired, CustomFieldDataType)
SELECT CustomFieldId, ProjectId, CustomFieldName, CustomFieldRequired, CustomFieldDataType FROM IssueTrackerOld..issueTracker_projectCustomFields
SET IDENTITY_INSERT issueTracker_projectCustomFields OFF
INSERT INTO issueTracker_projectCustomFieldValues (IssueId, CustomFieldId, CustomFieldValue)
SELECT IssueId, CustomFieldId, CustomFieldValue FROM IssueTrackerOld..issueTracker_projectCustomFieldValues
SET IDENTITY_INSERT issueTracker_projectCategories ON
INSERT INTO issueTracker_projectCategories(CategoryId, CategoryName, ProjectId, ParentCategoryId)
SELECT CategoryId, CategoryName, ProjectId, ParentCategoryId FROM IssueTrackerOld..issueTracker_projectCategories
SET IDENTITY_INSERT issueTracker_projectCategories OFF
SET IDENTITY_INSERT issueTracker_Issues ON
INSERT INTO issueTracker_Issues (IssueId, ProjectId, IssueTitle, IssueCategoryId, IssueMilestoneId, IssuePriorityId, IssueStatusId, IssueCreatorId, IssueOwnerId, IssueAssignedId, DateCreated, Disabled)
SELECT IssueId, ProjectId, IssueTitle, IssueCategoryId, IssueMilestoneId, IssuePriorityId, IssueStatusId, IssueCreatorId, IssueOwnerId, IssueAssignedId, DateCreated, Disabled FROM IssueTrackerOld..issueTracker_Issues
SET IDENTITY_INSERT issueTracker_Issues OFF
SET IDENTITY_INSERT issueTracker_IssueNotifications ON
INSERT INTO issueTracker_IssueNotifications(NotificationId, IssueId, UserId)
SELECT NotificationId, IssueId, UserId FROM IssueTrackerOld..issueTracker_IssueNotifications
SET IDENTITY_INSERT issueTracker_IssueNotifications OFF
SET IDENTITY_INSERT issueTracker_IssueHistory ON
INSERT INTO issueTracker_IssueHistory (HistoryId, IssueId, HistoryUserId, DateCreated)
SELECT HistoryId, IssueId, HistoryUserId, DateCreated FROM IssueTrackerOld..issueTracker_IssueHistory
SET IDENTITY_INSERT issueTracker_IssueHistory OFF
SET IDENTITY_INSERT issueTracker_IssueComments ON
INSERT INTO issueTracker_IssueComments (CommentId, IssueId, Comment, UserId, DateCreated)
SELECT CommentId, IssueId, Comment, UserId, DateCreated FROM IssueTrackerOld..issueTracker_IssueComments
SET IDENTITY_INSERT issueTracker_IssueComments OFF
INSERT INTO issueTracker_RelatedIssues (PrimaryIssueId, SecondaryIssueId, RelationType)
SELECT PrimaryIssueId, SecondaryIssueId, RelationType FROM IssueTrackerOld..issueTracker_RelatedIssues
SET IDENTITY_INSERT issueTracker_Queries ON
INSERT INTO issueTracker_Queries (QueryId, UserId, ProjectId, QueryName)
SELECT QueryId, UserId, ProjectId, QueryName FROM IssueTrackerOld..issueTracker_Queries
SET IDENTITY_INSERT issueTracker_Queries OFF
INSERT INTO issueTracker_QueryClauses (QueryId, BooleanOperator, FieldName, ComparisonOperator, FieldValue, DataType)
SELECT QueryId, BooleanOperator, FieldName, ComparisonOperator, FieldValue, DataType FROM IssueTrackerOld..issueTracker_QueryClauses
Now Playing: Mortal Treason - Khampa Nomads
I've been prototyping an application for work and had a slight problem. I needed to get the column position of the caret in a RichTextBox. To determine the column position I had to subtract the number of characters in the lines before the caret from the caret character position. The RichTextBox.SelecionStart property gives the caret character position so I'm halfway there. But I couldn't figure out how to compute the number of characters in the lines before the caret. The RichTextBox methods don't give that information. So after some investigation I had to go somewhere where I don't like to go, the Win32 API. So I cracked open Dan Appleman's Visual Basic Guide to the Win32 API and found out that it's still relevant in today's .Net world. I knew that I needed to use the SendMessage function but I didn't know what message to send. I found the answer on page 1362, EM_LINEINDEX. EM_LINEINDEX "determines the character offset of the first character in the specified line." In other word exactly what I was looking for. So here's the final code. I've subclassed the RichTextBox into a control that supports the GetCurrentColumn function. I now know the column position in my RichTextBox and everything is roses.
Public Class ColumnTextBox : Inherits RichTextBox
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, _
ByVal wParam As Integer, ByVal lParam As Long) As Integer
Private Const EM_LINEINDEX = &HBB
Public Function GetCurrentColumn() As Integer
Dim lineIndex As Integer = SendMessage(Me.Handle, EM_LINEINDEX, -1, 0)
Return Me.SelectionStart - lineIndex
End Function
End Class
Now Playing: Stavesacre - At the Moment