通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API

Posted

技术标签:

【中文标题】通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API【英文标题】:Calling Team Foundation Server(TFS) APIs via SQL Server stored procedure 【发布时间】:2019-12-02 06:10:42 【问题描述】:

我正在创建我的第一个 ASP.NET MVC 项目。我已经开始通过 C# 连接 TFS 并在 TFS 中添加错误。

var tfsURI = new Uri("http://test:8080/tfs");
var networkCredential1 = new NetworkCredential("test", "test!");

ICredentials credential = (ICredentials)networkCredential1;
Microsoft.VisualStudio.Services.Common.WindowsCredential winCred = new Microsoft.VisualStudio.Services.Common.WindowsCredential(credential);
VssCredentials vssCredentials = new VssCredentials(winCred);

using (TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsURI, vssCredentials))

    collection.EnsureAuthenticated();
    WorkItemStore workItemStore = collection.GetService<WorkItemStore>();
    Project teamProject = workItemStore.Projects["Test"];
    WorkItemType workItemType = teamProject.WorkItemTypes["Bug"];

    WorkItem Defect = new WorkItem(workItemType);
    FileInfo fi = new FileInfo(@"C:\\Document.docx");
    Attachment tfsAttachment = new Attachment(fi.FullName);
    Defect.Attachments.Add(tfsAttachment);

    Defect.Title = "Testing from VS to TFS Bug";
    Defect.Description = "Testing from VS to entered Bug in to TFS.";
    Defect.Fields["Assigned To"].Value = "Test";

    Defect.Save();
 

上面显示的这段代码可以正常工作。

但是使用 SQL Server 存储过程是否可以达到相同的结果?有什么方法可以连接到 TFS 并使用存储过程将 bug 添加到 TFS 中?

我有我的数据库,我想从 sql 存储过程连接到 TFS 并创建 WorkItem。通过 C# 我已经完成了上面的示例。但是,如果可以从存储过程中实现相同的目标,我需要任何示例。

【问题讨论】:

在答案 @PatrickLu-MSFT 的 cmets 中,您说:'取决于表中的条目'您已经在 C# 中使用工作代码将 WorkItems 添加到 TFS -- 为什么不也使用 C# 和 ADO.NET 来发出 SQL 查询并直接在 C# 代码中获取表数据? 【参考方案1】:

更新:

您可以从 SQL CLR 调用 Web 服务。一些教程可能会有所帮助:

How to create a SQL CLR stored procedure to get data from a web service and insert results into a SQL Server table Generate JSON Data Using Web Service And SQL Server Stored Procedure

不,为用户查询而设计的唯一数据库是仓库数据库。其他的明确不支持,不应直接查询。

不要直接对 TFS 数据库进行任何更改,否则您可能会失去 Microsoft 的支持

请在此处查看类似的问题:Add a stored procedure to TFS database

除了使用客户端 API 之外,您还可以使用 TFS 中的 Rest API 来做一些事情。

Work Items - Create

POST https://instance/collection/project/_apis/wit/workitems/$type?api-version=5.0

【讨论】:

你好,其实我不想直接改变 TFS 数据库,我只想连接 TFS 并通过 SQL 存储过程在 TFS 中创建 WortItem ......这可能......?我可以从存储过程中调用 TFS Rest API...... 我不想将存储过程添加到 TFS。我只想连接 TFS 并将 Workitem 添加到 TFS 但不像 C# 而是通过我的存储过程。 我有我的数据库并依赖于我想通过 SQL 存储过程创建 workItem 的表之一中的条目...... @user2813740 造成误解,请看我的更新回复。这真的不是一个常见的场景。我不得不说,我对此并不熟悉,也没有测试过。但是分享了一些可能有用的教程。此外,建议您使用 C# 或 powershell 来处理 TFS 连接并创建 WorkItem。它更简单。 感谢您的回复...由于性能问题我无法使用 CLR...我发现最好的方法是创建将在后台运行的窗口服务...【参考方案2】:

我在大量研究后发现的最佳解决方案,因为 SP 是不可能的。解决方案是创建窗口服务。它将每 5 分钟在后台运行一次,并将监视 SQl 表(我的情况)的条目,如果存在 Bug 条目将在 TFS 中创建票证。 这是迄今为止最简单、最好的解决方案,而且不会影响性能或任何其他方面。

【讨论】:

以上是关于通过 SQL Server 存储过程调用 Team Foundation Server(TFS) API的主要内容,如果未能解决你的问题,请参考以下文章

使用 OPENQUERY 语法通过链接服务器 (SQL Server 2005) 调用 MySQL 存储过程(带参数)的问题

SQL server T-SQL存储过程

用ASP调用SQL Server的视图和存储过程

SQL Server 触发器

SQL Server 触发器

SQL Server 触发器