我正在努力将针对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
答案 0 :(得分:0)
所以,我明白了。在基于Web的应用程序中,无需使用{0} {1}:
Response.Write(CType("{0} {1}", Char()), account_Renamed.LogicalName, account_Renamed.Name)
相反它看起来像这样:
Response.Write(account_Renamed.LogicalName & " " & account_Renamed.Name)
答案 1 :(得分: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))
使用String.Format()
实际上是使用StringBuilder类的快捷方式,它在字符串处理方面非常有效。当您使用连接运算符&
时,每次将一个片段附加到字符串时,都会在内存中创建一个全新的字符串对象。 StringBuilder以可变的方式创建/变换字符串,并且在执行大量字符串工作时速度更快。这就是为什么我认为这是使用快捷方法的最佳做法。