2009-04-22 59 views
0

我正在使用VB的ASP.NET應用程序。我在VB文件中使用SQLReader/SQLCommand/SQLConnection來嘗試提取數據值。在VB中聲明nvarchar /在SQL查詢中匹配nvarchar

我很困惑地發現,爲什麼查詢是不返回任何值的原因,這裏有人告訴我如何解決查詢覈實事情返回,他們不是。

我跟一個同事,他問是否會匹配,因爲我正在給一個字符串,以及數據庫的文本字段是一個nvarchar。我怎樣才能在VB中聲明變量,以便作爲查詢的參數提供時,它可以匹配?

數據看起來要匹配的類型,如「2」,「2A」,「1A」只是基本的東西,等等。

如果沒有辦法只有申報nvarchar的,沒有任何人對我怎麼可能解決辦法的一項建議?

非常感謝。

邊注:這是一個延續,各種各樣的,這個問題的:SQL Reader saying no values exist, query seems 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) 

後來,這樣的功能將被調用。再次

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 

感謝:

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

定義爲。

P.S. - Adam和Cerebus,如果可以的話,我會接受這兩個答案。他們都爲我帶來了這個想法,謝謝大家。

回答

2

.NET中的數據類型應爲string。你只需要確保你的參數實例使用NVarChar(如果它是一個DbParameter,然後那麼這是DBType.String。如果它是一個SqlDbParameter,那麼這就是SqlDbType.NVarChar)。

0

該字符串應該工作,因爲它的長度小於數據庫中nvarchar的字段大小。

2

nvarchar SqlDbType映射到.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) 
+2

我通常將其壓縮成一行,如下所示:tavelQuery.CommandParamenters.Add(「@ trip」,SqlDbType.NVarChar,2).Value =「1a」; – 2009-04-22 13:22:19

1

就.NET而言,它只是文本編碼。

找出編碼它是,probaly UTF8

字節[]巴爾= String.GetBytes(字符串)

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