0

我正在开发一个使用 VB 的 ASP.NET 应用程序。我在 VB 文件中使用 SQLReader/SQLCommand/SQLConnection 来尝试提取数据值。

我很困惑地发现查询没有返回任何值的原因,这里有人向我展示了如何对查询进行故障排除以验证正在返回的东西,但事实并非如此。

我与一位同事交谈,他问它是否匹配,因为我正在输入一个字符串,并且数据库的 Text 字段是一个 nvarchar。如何在 VB 中声明变量,以便在作为查询参数输入时,它可以匹配?

它看起来匹配的数据类型只是基本的东西,比如“2”、“2a”、“1a”等等。

如果没有办法只声明 nvarchar,有没有人建议我如何解决这个问题?

谢谢一堆。

旁注:这是这个问题的某种延续:SQL Reader say no values exist, query appears fine

编辑:感谢所有帮助。我按照你们所说的进行了设置,但现在我收到一个错误消息“不存在从对象类型 System.Data.SqlClient.SqlParameter 到已知托管提供程序本机类型的映射。”

我将参数作为表单范围的变量,如下所示:

Private travelParameter As New SqlParameter("@trip", SqlDbType.NVarChar)

然后在主窗体中,

travelQuery.CommandText = "SELECT [StartLoc], [EndLoc],[TravelTime], [AvgSpeed], [Distance]  FROM [TravelTimes] WHERE [TripNum] = @trip"

travelQuery.Parameters.AddWithValue("@trip", travelParameter)

稍后,将调用这样的函数。

FillWithTime("2", travelReader, time, newCell)

定义为:

Private Sub FillWithTime(ByVal TripNum As Char, ByRef travelReader As SqlDataReader, ByRef TimeData() As Object, ByRef Cell As System.Web.UI.WebControls.TableCell)

    travelParameter.Value = TripNum
    travelReader = travelQuery.ExecuteReader()
    If (travelReader.Read()) Then

        travelReader.GetValues(TimeData)

        'stuff
    End If

End Sub

再次感谢。

PS - Adam 和 Cerebus,如果可以的话,我会接受这两个答案。他们俩真的为我带来了这个想法,非常感谢。

4

4 回答 4

2

您在 .NET 中的数据类型应该是string. 您只需要确保您的参数实例正在使用NVarChar(如果是 a DbParameter,那么就是DBType.String。如果是 a SqlDbParameter,那么就是SqlDbType.NVarChar)。

于 2009-04-22T13:13:41.477 回答
2

SqlDbTypenvarchar映射到 .NET 字符串数据类型。就个人而言,我喜欢通过使它们尽可能具体来创建 SqlParameters:

'This overload of the constructor takes the Parameter name, ...
' its SqlDbType and size.
Dim param as New SqlParameter("@trip", SqlDbType.NVarChar, 2)
param.Value = "1a"
travelQuery.CommandParameters.Add(param)
于 2009-04-22T13:15:40.037 回答
1

就.net而言,它只是文本编码。

找出它是什么编码,可能是UTF8

byte[] barr = String.GetBytes(string)

System.Text.Encoding.UTF8.GetString(字节[])

于 2009-04-22T13:38:57.190 回答
0

该字符串应该可以工作,因为它的长度小于数据库中 nvarchar 的字段大小。

于 2009-04-22T13:09:09.710 回答