Sql server 使用SQL Server身份验证从WinForms应用程序连接到SSR

Sql server 使用SQL Server身份验证从WinForms应用程序连接到SSR,sql-server,vb.net,winforms,reporting-services,reporting,Sql Server,Vb.net,Winforms,Reporting Services,Reporting,我正忙着测试SSR,看看它是否是我们当前报告解决方案的可行替代方案。我已经在本地机器上设置了SSR,并使用SQL Server report Builder开发了一个工作报告。现在我要做的是从WinForms应用程序中调用报表,并将其显示在ReportViewer控件中。问题是,我已经将SQL Server设置为使用SQL Server身份验证,并且我正在努力找出如何以编程方式连接到它 到目前为止,我拼凑的代码如下所示: 导入Microsoft.Reporting.WinForms 公开课 公共

我正忙着测试SSR,看看它是否是我们当前报告解决方案的可行替代方案。我已经在本地机器上设置了SSR,并使用SQL Server report Builder开发了一个工作报告。现在我要做的是从WinForms应用程序中调用报表,并将其显示在ReportViewer控件中。问题是,我已经将SQL Server设置为使用SQL Server身份验证,并且我正在努力找出如何以编程方式连接到它

到目前为止,我拼凑的代码如下所示:

导入Microsoft.Reporting.WinForms
公开课
公共v_报告\u名称为String=“TestReport”
公共v_报告服务器为字符串=”http://elnah-ict-dt006:80"
公共v_报告路径为String=“/reports_SSRS/”
私有子frmMain_Load(发送方作为对象,e作为事件参数)处理MyBase.Load
'创建参数数组
Dim paramlist作为新列表(Microsoft.Reporting.WinForms.ReportParameter的)
'创建报表所需的特定参数
Dim param1作为新的Microsoft.Reporting.WinForms.ReportParameter(“ClientID”)
'将值添加到参数这里我们使用一个保存参数值的变量
参数1.值。添加(“0279”)
'将参数添加到数组
paramlist.Add(param1)
'将ReportViewer的处理模式设置为远程
ReportViewer1.ProcessingMode=ProcessingMode.Remote
'使用报表查看器的serverreport属性从远程SSRS服务器选择报表
ReportViewer1.ServerReport.ReportServerUrl=New System.Uri(v_report_server)
ReportViewer1.ServerReport.ReportPath=v_报告路径&v_报告名称
'选择使用报表查看器控件或使用SSRS服务在报表服务器上生成报表的位置。
'Me.ReportViewer1.ProcessingMode=Microsoft.Reporting.WinForms.ProcessingMode.Remote
'将参数列表添加到查看器中
ReportViewer1.ServerReport.SetParameters(参数列表)
Me.ReportViewer1.RefreshReport()
端接头
末级
当它点击底部的SetParameters行时,会收到以下错误消息:

Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices 2005.Execution.RSExecutionConnection.MissingEndpointException HResult=0x80131500 Message=尝试连接到报表服务器失败。检查您的连接信息以及报表服务器是否为兼容版本。 Source=Microsoft.ReportViewer.WinForms

我试图找到如何设置用户名和密码的示例,但据我所知,大多数示例都集中在使用Windows身份验证上。我试过下面这句话,但不起作用:

ReportViewer1.ServerReport.ReportServerCredentials=新的ReportServerCredentials(“SA”、“我的密码”)

我已经很久没有在VB.NET中工作了,请原谅任何明显的错误。

以下是我最近参与的一个Web表单项目的一些代码:

private void SetCredentials()
{
var userName=ConfigurationManager.AppSettings[“SSRSUserName”];
var passwordEncrypted=ConfigurationManager.AppSettings[“SSRSUserPasswordEncrypted”];
var passwordPlainText=SI.Crypto3.Crypto.Decrypt(密码加密,密码短语);
var domain=ConfigurationManager.AppSettings[“SSRSUserDomain”];
如果(!string.IsNullOrEmpty(用户名)和&!string.IsNullOrEmpty(密码明文)和&!string.IsNullOrEmpty(域))
{
this.EventsHubReportViewer.ServerReport.ReportServerCredentials=新的ReportServerCredentials(用户名、密码、明文、域);
}
}
这是C#但希望你能看到最重要的部分是最后一行。我认为,在你的情况下,等价物应该是:

ReportViewer1.ServerReport.ReportServerCredentials=新的ReportServerCredentials(用户名、密码、域)
如果您的
域与服务器位于同一域中,则
域的值可以是空的
字符串

编辑:

我仔细看了一下,代码使用的
ReportServerCredentials
类是我们自己的。在您的例子中,可以使用
Microsoft.ReportViewer.WinForms.ReportServerCredentials
类,我认为它没有这样的构造函数。查看该类型的
NetworkCredentials
属性的文档表明您需要执行以下操作:

Dim凭据作为新的网络凭据(用户名、密码、域)
ReportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials=凭据

为了便于将来参考,请看一下我对您的问题所做的编辑,以使您的VB代码正确突出显示。如果VB.NET不是第一个标记,您需要它。您能告诉我们您的连接字符串是什么样子的吗?另外,SQL Server身份验证是否已将其设置为混合模式或仅SQL登录?感谢jmcillhinney提供的提示,我以后会这样做@西蒙普莱斯,我想我把它设定为混合型。如果查看属性,服务器身份验证将设置为SQL Server和Windows身份验证模式。就连接字符串而言,我没有。不确定在这种情况下如何做到这一点?我在网上看到的示例没有使用。请看。@jmcilhinney我检查了源代码以进行编辑,但就在不久前,我收到了以下评论。“实际上应该是或。lang-vb.net无效:)。虽然您的第一行实际上是列表的一部分,但是您的其他行缩进太多,因此它们成为第一个列表下的嵌套列表。-12小时前”现在我很困惑。我添加了
Imports System.Configuration
,但似乎无法引用
ConfigurationManager
。我做错了什么?您不需要
ConfigurationManager
类。正如我所说,这只是一个例子,说明我们是如何在我们的一个应用程序中使用它的,这是最后一行非常重要的内容。你只是创造