【问题标题】:ASP.NET 4.0 - Conversion failed when converting from a character string to uniqueidentifier!ASP.NET 4.0 - 从字符串转换为唯一标识符时转换失败!
【发布时间】:2010-08-16 22:59:33
【问题描述】:

我正在尝试从我的 .cshtml 页面中的一个小函数中检索 xml。它给我一个错误。但是,这在控制台/表单环境中运行良好。

它需要 3 个参数和 1 个异常。

myDll.GetXML(year, username, uniqueidentifier, out ex);

当我运行此页面时,我收到错误消息“从字符串转换为唯一标识符时转换失败。”

或者一堆……

System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting from a character string to uniqueidentifier.

   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)

   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()

   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)

   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()

   at System.Data.SqlClient.SqlDataReader.get_MetaData()

   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)

   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)

   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)

   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)

   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)

   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)

   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)

   at System.CapTool.Server.DAL.DAL.GetCapabilitiesXML(Int32 fiscalYear, String majComId, String userName, Exception& exception)

在我的 GetXML 函数中,它只是将参数应用于存储过程。存储过程返回我的对象​​。从那里我可以在 .cshtml 中做所有有趣的事情。

当我在 SQL Management Studio 中手动输入值时,我确实得到了正确的结果。同样,当我创建一个窗口窗体应用程序时——我也得到了正确的结果!

当涉及到 .cshtml 或 .aspx 页面时,我发现转换失败。

我已经尝试强制转换存储过程 uniqueidentifier 参数,但它仍然给我这个错误。

我认为……它与唯一标识符有关……但我不知道该怎么做……

【问题讨论】:

  • 如果您发布一些相关代码和/或数据会有所帮助。
  • 提供调用 System.CapTool.Server.DAL.DAL.GetCapabilitiesXML(Int32 accountingYear, String majComId, String userName, Exception& exception)的代码

标签: c# asp.net webforms webmatrix


【解决方案1】:

您的参数有哪些类型,它们是如何转换为 SQL 的?

运行查询分析器并查看数据库中实际发生的情况,听起来您可能正在添加或排除“''”并且 SQL 无法正确转换。

【讨论】:

  • 就这么简单...我忽略了愚蠢的错误...如果将来有人遇到此错误-只需再次检查、检查和检查以确保您实际上传递了一个有效的参数.
【解决方案2】:
myDll.GetXML(year, username, uniqueidentifier, out ex);

我在“WebMatrix”环境中工作。因此(目前)不能在“额外的”“”“”之类的东西上启用语法突出显示。

以后我会检查,检查,再检查,以确保我的参数是有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2018-03-08
    相关资源
    最近更新 更多