当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-Updatetablefromtwocommaseparatedparametersasinputshare

时间:2023-04-10 14:04:20 C#

Updatetablefromtwocommaseparatedparametersasinput:IDOrder11223344现在用户可以像前端Gridview一样更新顺序:IDOrder12243143现在如果用户点击保存按钮,ID和订单数据将是@sID=(1,2,3,4)and@sOrder=(2,4,1,3)发送到存储过程现在,如果我想更新订单并保存它,我想将它存储到数据库中。如何通过存储过程更新到表中以更新表格,并且在选择时会给我以下结果:ID顺序122431433没有内置功能来解析这些逗号分隔的字符串。但是,您可以使用SQLServer中的XML函数来执行此操作。类似于:DECLARE@sIDVARCHAR(100)='1,2,3,4';声明@sOrderVARCHAR(10)='2,4,1,3';声明@sIDASXmlxml=CONVERT(xml,''+REPLACE(@sID,',','')+'');声明@sOrderASXmlxml=CONVERT(xml,''+REPLACE(@sOrder,',','')+'');;WITHParsedIDsAS(SELECTID=Tcvalue('.','varchar(20)'),ROW_NUMBER()OVER(ORDERBY(SELECT1))ASRowNumberFROM@sIDASXml.nodes('/root/s')T(c)),ParsedOrdersAS(SELECT"Order"=Tcvalue('.','varchar(20)'),ROW_NUMBER()OVER(ORDERBY(SELECT1))ASRowNumberFROM@sOrderASXml.nodes('/root/s')T(c))UPDATEtSETt."Order"=p."Order"FROM@tableNameAStINNERJOIN(SELECTi.ID,p."Order"FROMParsedOrderspINNERJOINParsedIDsiONp.RowNumber=i.RowNumber)ASpONt.ID=p.ID;现场演示,然后您可以将其放入存储过程或其他任何内容。请注意:您不需要手动执行所有这些操作,应该有某种方法可以使此gridview通过数据绑定自动更新基础数据表。你应该寻找这样的东西而不是所有这些痛苦。您可以使用表值参数来避免将分隔符分隔的值甚至XML发送到数据库。为此,您需要:在数据库中声明参数类型,如下所示:CREATETYPEUpdateOrderTypeTABLE(IDint,Orderint)之后,您可以定义一个使用该参数的过程,如CREATEPROCEDUREUpdateOrder(@UpdateOrderValuesUpdateOrderTypereadonly)ASBEGINUPDATEtSETOrderID=tvp.OrderFROMtINNERJOIN@UpdateOrderValuestvpONt.ID=tvp.IDEND如您所见,与解析XML或分隔字符串相比,SQL是微不足道的。在C#中使用参数:using(SqlCommandcommand=connection.CreateCommand()){command.CommandText="dbo.UpdateOrder";command.CommandType=CommandType.StoredProcedure;//从您的gridview数据创建一个表parameter.SqlDbType=SqlDbType.Structured;parameter.TypeName="dbo.UpdateOrderType";命令.ExecuteNonQuery();}其中CreateDataTable是这样的://假设源数据具有ID和Order属性privatestaticDataTableCreateDataTable(IEnumerablesource){DataTabletable=newDataTable();table.Columns.Add("ID",typeof(int));table.Columns.Add("顺序",typeof(int));foreach(源中的OrderData数据){table.Rows.Add(data.ID,data.Order);}返回表;}(代码撤消此操作)如您所见,这种方法(特定于SQL-Server2008及更高版本)使得将结构化数据作为参数传递给过程变得更加容易和正式。更重要的是,您一直在使用类型安全,因此在字符串/xml操作期间出现的大多数解析错误都不是问题。你可以使用charindex之类的。以上就是C#学习教程:以两个逗号分隔的参数为输入更新表格,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——DECLARE@idVARCHAR(MAX)DECLARE@orderVARCHAR(MAX)SET@id='1,2,3,4,'SET@order='2,4,1,3,'WHILECHARINDEX(',',@id)>0BEGINDECLARE@tmpidVARCHAR(50)SET@tmpid=SUBSTRING(@id,1,(charindex(',',@id)-1))DECLARE@tmporderVARCHAR(50)SET@tmporder=SUBSTRING(@order,1,(charindex(',',@order)-1))UPDATEdbo.TestSET[Order]=@tmporderWHEREID=convert(int,@tmpid)SET@id=SUBSTRING(@id,charindex(',',@id)+1,len(@id))SET@order=SUBSTRING(@order,charindex(',',@order)+1,len(@order))END本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢