【发布时间】:2017-08-06 14:20:01
【问题描述】:
我已将 WCF 服务附加到我的示例网站。
WCF 函数可以正常工作,但使用 SQL 查询从 SQL 服务器获取数据的函数除外。
我对VB.NET不是很熟悉,我的经验来自VBA,类似但设置查询有很大不同。
起初我尝试使用SqlDataReader 然后SqlDataAdapter - 结果相同。我的服务卡住了。
Visual Studio 显示 SQL Server 无法传递数据的错误,因为存在内部错误。
这很奇怪,因为当我在 Visual Studio 中使用“WCF 测试客户端”时,这两个函数都能正常工作并接收正确的数据。此外,当我将此功能直接附加到我的网站时,效果也很好。问题在于 WCF 使用它们。
下面是我的 SQLDataAdapter 函数
Public Function GetCookiesPriceDS(ByVal nameOfCookie As String) _
As DataSet Implements IService1.GetCookiesPriceDS
Dim queryString As String
Dim dataSet As DataSet = New DataSet("temporary")
queryString = "select CookiesPrice from " &
"tblCookies where CookiesName='" & nameOfCookie & "'"
Using connection As New SqlConnection _
("Server= xyz\SQLEXPRESS; Database = Cookies2; " &
"Integrated Security = true;User Id = xyz;Password = xyz")
Dim adapter As New SqlDataAdapter()
adapter.SelectCommand = New SqlCommand(queryString, connection)
adapter.Fill(dataSet)
Return dataSet
End Using
End Function
【问题讨论】:
-
您的连接字符串指定应使用集成安全性,但它还指定了用户凭据,这没有意义。您想使用您提供的凭据还是以运行该服务的用户身份登录?
-
另外,您的代码容易受到 SQL 注入攻击。使用参数化查询。还有一件事——SqlDataAdapter 和 SqlCommand 都实现了 IDisposable 接口,你应该在 using 语句中使用它们。最后一个提示 - 这是我个人的意见 - 不要去 vb.net。转到 c#。语法的相似之处只会让您感到困惑,因为 vb.Net 的工作原理与 VBA 完全不同。
-
@jmcilhinney ok 从字符串中删除了用户和密码信息。谢谢大家的提示,但我仍然不知道如何解决这个问题:(
-
您根本没有收到错误消息吗?
-
那么,您是在说,实际上并没有说,您确实想使用运行该服务的同一帐户连接到数据库吗?如果在调用
Fill之前在连接对象上调用Open会发生什么?Fill将隐式打开和关闭连接,因此显式执行此操作将指示问题是连接还是查询。
标签: sql sql-server vb.net wcf ado.net