1

Dynamics CRMSDK2011のMicrosoftサンプルの一部のコンソールコードをASP.NETWebアプリケーションに変換する作業を行っています。コンソールモードでは正常に実行されますが、ASP.NETで実行するように変換した後、次のエラーが発生します。

タイプ'System.InvalidCastException'の最初のチャンスの例外がMicrosoft.VisualBasic.dllで発生しました

これが私のソースコードです:

    Public Sub Run(ByVal connectionString As String, ByVal promptforDelete As Boolean)
    Try
        Dim connection As Microsoft.Xrm.Client.CrmConnection =
            CrmConnection.Parse(connectionString)
        _orgService = New OrganizationService(connection)
        Using _orgService
            Dim account_Renamed As Account = New Account With {.Name = "Fourth Coffee"}
            _accountId = _orgService.Create(account_Renamed)
            Response.Write(CType("{0} {1}", Char()), account_Renamed.LogicalName, account_Renamed.Name)
            Dim cols As New ColumnSet(New String() {"name",
                                                   "address1_postalcode",
                                                    "lastusedincampaign"})
            Dim retrievedAccount As Account = _orgService.Retrieve("account", _accountId, cols).ToEntity(Of Account)()
            Response.Write("Retrieved record.")
            retrievedAccount.Address1_PostalCode = "98052"
            Response.Write("Updated Account Postal Code.")

        End Using
    Catch ex As Exception

    End Try
End Sub
4

2 に答える 2

0

それで、私はそれを理解しました。Webベースのアプリケーションでは、{0}{1}を使用する必要はありません。

Response.Write(CType("{0} {1}", Char()), account_Renamed.LogicalName, account_Renamed.Name)

代わりに、次のようになります。

Response.Write(account_Renamed.LogicalName & " " & account_Renamed.Name)
于 2012-11-08T19:10:01.187 に答える
0

失敗する理由は、アプリケーションがWebベースであることに関係していません。それはあなたがどのように使っているかと関係がありますCType()。これを使用して、2つの文字列を連結しますが、これは使用目的ではありません。

このCType()メソッドは、オブジェクトを特定のタイプにキャストするために使用されます。このコードスニペットを使用すると、次のようになります。

CType("{0} {1}", Char())

文字列リテラルを文字配列CType()に変換するように指示しています。"{0} {1}"これは実際に機能します!ここで、文字配列を、文字Reponse.Write()列値のように見える2つの追加パラメーターとともに渡します。

Reponse.Write()3つの引数を受け入れるオーバーロードがあります。最初の引数は文字配列ですが、他の値は整数(インデックスとカウント)です。

正直なところ、これは実行されるどころか構築されたものでさえ驚いています。将来のコードでは、文字列の連結は次のように行うのが最適です(IMHO)。

String.Format("{0} {1}", account_Renamed.LogicalName, account_Renamed.Name)

&演算子と連結する代わりに。この方法で文字列を連結すると、コードはこれに変わります。

Response.Write(String.Format("{0} {1}", account_Renamed.LogicalName, account_Renamed.Name))

使用String.Format()は、実際には文字列処理で非常に効率的なStringBuilderクラスを使用するためのショートカット方法です。連結演算子を使用すると&、ピースが文字列にアタッチされるたびに、メモリ内に完全に新しい文字列オブジェクトが作成されます。StringBuilderは、可変の方法で文字列を作成/変更し、多くの文字列作業を行う場合ははるかに高速です。そのため、ショートカット方式を使用することがベストプラクティスであると考えています。

于 2013-01-18T20:22:00.063 に答える