为什么空单元格在 SQL 存储过程执行期间会抛出错误

2024-05-05

SELECT
    CAST ([content_html] AS XML).query('/root/Physicians/specialty/a') AS [Specialty1]
    , CAST ([content_html] AS XML).query('/root/Physicians/specialty2/a') AS [Specialty2]
    , CAST ([content_html] AS XML).query('/root/Physicians/specialty3/a') AS [Specialty3]
    , CAST ([content_html] AS XML).query('/root/Physicians/specialty4/a') AS [Specialty4]
    , CAST ([content_html] AS XML).query('/root/Physicians/specialty5/a') AS [Specialty5]
    , CAST ([content_html] AS XML).query('/root/Physicians/specialty6/a') AS [Specialty6]
FROM
    [db].[dbo].[content]
WHERE
    [folder_id] = '188'
    AND
    (content_status = 'A')
ORDER BY
    [content_title]

ASP.net中继器(部分):

<asp:Label ID="lblSpec1" runat="server"><%# Eval("Specialty1").ToString() + DisplayMultipleValues(Eval("Specialty2").ToString()) + DisplayMultipleValues(Eval("Specialty3").ToString()) + DisplayMultipleValues(Eval("Specialty4").ToString()) + DisplayMultipleValues(Eval("Specialty5").ToString()) + DisplayMultipleValues(Eval("Specialty6").ToString()) %></asp:Label>

C#(处理多个条目并添加一个的代码,):

public string DisplayMultipleValues(string strValue)
{
    return (NonBlankValueOf(strValue));
}
public string NonBlankValueOf(string source)
{
    return (string.IsNullOrEmpty(source)) ? "" : ", " + source;
}

当我在 SQL 中运行查询时,它工作正常(如果该列没有值,则它是一个空单元格),但是通过后面的代码运行它,会出现以下错误:

Server Error in '/' Application.

DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.

Source Error: 


Line 96:                                     </div>
Line 97:                                     <div class="optionRight">
Line 98:                                         <asp:Label ID="lblSpec1" runat="server"><%# Eval("Specialty1").ToString() + DisplayMultipleValues(Eval("Specialty2").ToString()) + DisplayMultipleValues(Eval("Specialty3").ToString()) + DisplayMultipleValues(Eval("Specialty4").ToString()) + DisplayMultipleValues(Eval("Specialty5").ToString()) + DisplayMultipleValues(Eval("Specialty6").ToString()) %></asp:Label>
Line 99:                                     </div>
Line 100:                                </div>

Source File: c:\er.aspx    Line: 98 

Stack Trace: 


[HttpException (0x80004005): DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'Specialty3'.]
   System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) +12523742
   System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) +142
   ASP.find_provider_aspx.__DataBind__control22(Object sender, EventArgs e) in c:\er.aspx:98
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +304
   System.Web.UI.Control.DataBindChildren() +12746711
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
   System.Web.UI.Control.DataBindChildren() +12746711
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +321
   System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +183
   System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +659
   System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +164
   find_provider.Search() in c:\er.aspx.cs:294
   find_provider.Page_Load(Object sender, EventArgs e) in c:\er.aspx.cs:37
   System.Web.UI.Control.LoadRecursive() +71
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178

解决这个问题的最佳方法是什么?

我尝试了以下方法:

<asp:Label ID="lblspec1" runat="server"><%# If(Eval("Specialty1").ToString() Is DBNull.Value, "", Eval("Specialty1").ToString()) + If(Eval("Specialty2").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty2").ToString())) + If(Eval("Specialty3").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty3").ToString())) + If(Eval("Specialty4").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty4").ToString())) + If(Eval("Specialty5").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty5").ToString())) + If(Eval("Specialty6").ToString() Is DBNull.Value, "", DisplayOffices(Eval("Specialty6").ToString())) %></asp:Label>

您可以将类似这样的内容添加到页面后面的代码中:

protected object MyEval(string expression)
{
    object o = null;
    try
    {
        o = DataBinder.Eval(this.GetDataItem(), expression);
    }
    catch
    {
        o = System.String.Empty;
    }
    return o;
}

然后将所有 Eval 替换为“MyEval”:

<asp:Label ID="lblSpec1" runat="server"><%# MyEval("Specialty1").ToString() + DisplayMultiplMyEvalues(MyEval("Specialty2").ToString()) + DisplayMultiplMyEvalues(MyEval("Specialty3").ToString()) + DisplayMultiplMyEvalues(MyEval("Specialty4").ToString()) + DisplayMultiplMyEvalues(MyEval("Specialty5").ToString()) + DisplayMultiplMyEvalues(MyEval("Specialty6").ToString()) %></asp:Label>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么空单元格在 SQL 存储过程执行期间会抛出错误 的相关文章

随机推荐