0

VB を使用する ASP.NET アプリケーションに取り組んでいます。VB ファイル内で SQLReader/SQLCommand/SQLConnection を使用して、データ値を取得しようとしています。

クエリが値を返さない理由を見つけて当惑しました。ここの誰かが、クエリをトラブルシューティングして、返されていないものを確認する方法を教えてくれました。

同僚と話をしたところ、一致するかどうか尋ねられました。これは、私が文字列を入力していて、データベースのテキスト フィールドが nvarchar であるためです。VB で変数を宣言して、クエリのパラメーターとして入力したときに一致するようにするにはどうすればよいですか?

一致するように見えるデータのタイプは、「2」、「2a」、「1a」などの基本的なものです。

nvarchar を宣言する方法がない場合、それを回避する方法について誰か提案がありますか?

本当にありがとう。

補足: これは、この質問の一種の続きです: SQL Reader は値が存在しないと言っています、クエリは問題ないようです

編集:すべての助けをありがとう。皆さんが言ったように設定しましたが、「オブジェクト型 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 のデータ型は .NET にする必要がありstringます。パラメータインスタンスが使用していることを確認する必要があるだけですNVarChar(それが の場合DbParameter、それは ですDBType.String。それが の場合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( byte[] )

于 2009-04-22T13:38:57.190 に答える
0

文字列の長さがデータベース内の nvarchar のフィールド サイズよりも小さい場合、文字列は機能するはずです。

于 2009-04-22T13:09:09.710 に答える