C#学习教程:使用LIKE的SqlDataSourceSelectCommand不起作用h.call=hrl.callWHERE(h.Businesslike'%'+@business+'%'andh.Businessisnotnull)and(hrl.frn=@frnandhrl.frnisnotnull)业务和frn给定控制参数,它应该返回数据,即使其中一个或两个都留空,但如果我只为frn输入数据,它什么也不会返回。我不认为我用我的T-SQL做的是正确的,我不确定我是否正确地做了类似的事情。如果两个文本框都留空,则应返回所有数据。如果输入了frn,但business留空,则只应返回与该frn相关的数据。如果输入了business但frn为空,则它应该返回所有匹配项,如business。如果两者都输入,它应该只返回匹配frn和business的数据。另外,我不确定是否真的有必要做andisnotnull。protectedvoidbtnSearch_Click(objectsender,EventArgse){if(txtFRN.Text=="")frn=null;如果(txtBusiness.Text=="")业务=null;sqlDsMaster.SelectParameters[frn].DefaultValue=frn;sqlDsMaster.SelectParameters[业务].DefaultValue=业务;sqlDsMaster.DataBind();当点击此行时,上面抛出“对象引用未设置为实例”:sqlDsMaster.SelectParameters[frn].DefaultValue=frn;frn和business是一个属性。这是SearchMaster存储过程:CREAETEPROCEDURESearchMaster@businessnvarchar(300)=NULL,@frnnvarchar(10)=NULLASSELECTh.Business,hrl.frnFROMregistrationhrlINNERJOINholderhonh.call=hrl.调用WHERE(@businessISNULLORh.Businesslike'%'+@business+'%')AND(@frnISNULLORhrl.frn=@frn)这是SearchDetails存储过程:CREATEPROCEDURESearchDetails@businessnvarchar(300)=NULL,@frnnvarchar(10)=NULLASSELECThrl.callFROMregistrationhrlINNERJOINholderhONh.call=hrl.callWHERE(@businessISNULLORh.BusinessLIKE'%'+@business+'%')AND(@frnISNULLORhrl.frn=@frn)以下是SearchMaster过程的SqlDataSource:下面是SearchDetails过程的SqlDataSource:这里是绑定SqlDsMaster的按钮点击:protectedvoidbtnSearch_Click(objectsender,EventArgse){sqlDsMaster.DataBind();}这里是gvMaster_RowCreated,它为细节创建行:数据源;if(ctrl!=null&&e.Row.DataItem!=null){ctrl.SelectParameters["frn"].DefaultValue=((DataRowView)e.Row.DataItem)["frn"].ToString();ctrl.SelectParameters["business"].DefaultValue=((DataRowView)e.Row.DataItem)["business"].ToString();如果我通过SQLServerManagementStudio运行它,SearchMaster和SearchDetails都可以工作,如果我输入业务和frn数据它可以工作,但如果我只输入一个则不返回任何数据参数设置是否正确?另外,如果我在过程中将参数初始化为null,我还需要使用ConvertEmptyStringToNull吗?我会做类似的事情:where(@businessisnullor@business=''orh.Businesslike'%'+@business+'%')and(@frnisnullor@frn=''orhrl.frn=@frn)如果在传递空搜索字符串之前将其设为空,则可以跳过@yyy="部分。将"andh.Businessisnotnull"更改为"orh.Businessisnull"and"andhrl.frnisnotnull"to"orhrl.frnisnull"这将在这些参数为null时返回所有内容。"andisnotnull"存储过程是正确的:(@frnISNULLORhrl.frn=@frn)。你想要如果frn为null或匹配,则选择任何行。相同的模式适用于业务属性NullReferenceExceptionsqlDsMaster.SelectParameters[frn].DefaultValue=frn;这会失败,因为您正在使用frn属性的值(可能为null)而不是字符串“frn”作为SelectParameters索引。您在下一行有相同的错误,业务而不是“业务”。ConvertEmptyStringToNull我会反过来问这个问题:如果您使用ConvertEmptyStringToNull,为什么要用相同的功能给调用者带来负担?除非空字符串是frn或业务的有效值,frn我将设置ConvertEmptyStringToNull并且不关心它是否在调用方中。我希望这能回答你所有的问题。以上是C#学习教程:SqlDataSourceSelectCommandusingLIKEdoesnotwork。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: