2017-09-04 7 views
0

すでにパラメータ化されたクエリを問題なく使用しましたが、今日はデバッグできないエラーが発生しました。 は、これは私の作業クエリパラメータが動作していないVb 2015クエリ

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente =" & strName & " or codiceamministrazione='" & strName & "' or piva='" & strName & "' or codfisc='" & strName & "'" 

同じですが、パラメータで、内部IDまたは商用に基づいて、クライアントの名前を示し、私はオートコンプリートの手順でこれを使用

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected] or [email protected]" 
cmd.Parameters.AddWithValue("@Cliente", strName) 

を動作していませんライセンス番号(および他の同様のコード)。データベース上のクライアントレコードには、すべてのコードフィールドがコンパイルされていても1つだけでもかまいません。

パラメータが設定されていないクエリでは、自動補完候補のポップアップが表示されます。エラーもありません。

EDIT:同じ関数内(semplicityのために前に省略)この

cmd.Parameters.Add("@Cliente", SqlDbType.VarChar) 
cmd.Parameters("@Cliente").Value = strName 

今別のクエリを使用しては 十分な奇妙な、動作しますが、私はこの質問をした何のため1にはありません。

ワーキング:

cmd.CommandText = "select idcliente, ragsociale from Clienti where ragsociale like '%'[email protected]+'%' or [email protected]" 

まだ動作しません:idclienteに対してテストするとき、あなたの元のクエリで

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or [email protected] or [email protected]" 
+0

あなたはそれを '' @Cliente in(idcliente、codiceamministrazione、piva、codfisc) 'のどこに書き換えることができるのですか? –

+0

.AddWithValueを使用しないでください!私はこれが問題だと思う。 – muffi

+0

[Joel Coehoornのブログ記事](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)に、muffiが何を言っているかを再掲してください。 –

答えて

0

、あなたは数(引用符なし、それラウンド)としてstrNameを扱うが、すべてのために他のフィールドは文字列のように扱います。だから、あなたはそれが潜在的に数字や文字列を含む可能性があることを暗示しています。これは問題となります。数値を入力すると、パラメータ化されたクエリのバージョンではすべての場合に文字列のように扱われ、数値はidclienteと一致しないため、結果が得られない可能性があります。

明確にする:入力が数字であるがクエリが文字列だと思った場合(パラメータのデータ型のため)、データベースの数値フィールドと一致しません。 12345 != "12345"

これらのシナリオでは、個別のパラメータを定義する必要があります。同じ値を渡すこともできますが、ある場合はパラメータのデータ型をvarcharに設定し、それ以外の場合はintに設定します(これを行う前に値を解析する必要があるかもしれません)。そうしないと、その場合はnullまたは0または偶然の一致をしないものを設定してください)。

関連する問題