1

我正在将 Dynamics CRM SDK 2011 的 Microsoft 示例中的一些控制台代码转换为 ASP.NET Web 应用程序。它在控制台模式下运行良好,但在转换为在 ASP.NET 中运行后出现错误:

Microsoft.VisualBasic.dll 中出现了“System.InvalidCastException”类型的第一次机会异常

这是我的源代码:

    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(). 您正在使用它来连接两个不是它的用途的字符串。

CType()方法用于将对象转换为特定类型。使用这段代码:

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

您告诉CType()将字符串文字转换"{0} {1}"为字符数组。这实际上有效!现在您将一个字符数组Reponse.Write()以及两个附加参数传递给我,这些参数对我来说似乎是字符串值。

有一个Reponse.Write()接受三个参数的重载,第一个是字符数组,但其他值是整数(索引和计数)。

老实说,我很惊讶这甚至是建造的,更不用说跑了。对于未来的代码,最好像这样完成字符串连接(恕我直言):

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

而不是与&运算符连接。如果您以这种方式连接字符串,您的代码将更改为此。

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

UsingString.Format()实际上是使用 StringBuilder 类的一种快捷方式,它在字符串处理方面非常有效。当您使用连接运算符时,&每次将一个片段附加到字符串时,您都会在内存中创建一个全新的字符串对象。StringBuilder 以可变的方式创建/改变字符串,并且在执行大量字符串工作时要快得多。这就是为什么我认为使用快捷方式是最佳实践。

于 2013-01-18T20:22:00.063 回答