2

コードに行notes = If(IsDBNull(notes),"","")があります。ローカルホストで実行しようとすると、

行 51 でエラーが発生しています。

説明: この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソース コードを適切に変更してください。

Compiler Error Message: BC30201: Expression expected.

Source Error:



Line 49:       End Try  
Line 50:       
**Line 51:     notes = If(IsDBNull(notes),"","")** 
Line 52:       'Context.Response.Output.Write("AAAA"+notes+"MMM")
Line 53:        if notes.Trim().Equals("TIMEUP") then  


Version Information: Microsoft .NET Framework Version:2.0.50727.5466; ASP.NET Version:2.0.50727.5459 

ただし、同じコードが本番環境に移植されると、問題なく実行されますが、その理由は何ですか?

4

3 に答える 3

3

つまり:

IIf(IsDBNull(notes),"","")

余分な I に注意してください。

ステートメントが 53 行目にあるように宣言されている場合:

If <condition> Then

IIF ステートメントは次のように宣言されます。

IIf(Expression, True, False)

http://msdn.microsoft.com/en-gb/library/27ydhh0d(v=vs.71).aspx

于 2013-02-14T09:13:24.510 に答える
3

問題は、If-operatorが VS 2008 で導入されましたが、.NET Framework Version:2.0 にコンパイルしていることです。

これは .NET 2 でコンパイルされます。

Dim notesObj As Object = IIf(IsDBNull(notes),"","")

違いはIIF、オブジェクトを返すのに対し、If強く型付けされていることです (C# の条件演算子 (?) )。したがって、次のように記述できます。

Dim notesStr = If(IsDBNull(notes),"","") ' a string '
于 2013-02-14T09:17:02.227 に答える
2

VB.NET 2008 では、演算子が導入されました。これは回路を短絡させます。つまり、if-true および if-false 式のうちの 1 つだけが評価されます。If

これ以前は、利用可能なのは function だけでした。これはfunctionであるため、常にif-true と if-false の両方の式を評価します。IIf

ローカル マシンは VB.NET 2005 以前を使用しているのに対し、プロダクション ボックスは VB.NET 2008 以降を使用しているようです。

于 2013-02-14T09:16:49.100 に答える