50)AS--INSERTanewrowinthetable.INSERT[dbo].[Tbl_Test]([id],[name])VALUES(ISNULl(@guidid,(newid())),@sname)我需要C#并将其输出到c#:cmd.Parameters.AddWithValue("@guidid",_id);//_id为SqlGuidcmd.Parameters.AddWithValue("@sname","mehdi");命令。执行非查询();MessageBox.Show(_id.ToString());但是消息框显示空值!我怎样才能返回ID?我将其更改为:ALTERPROCEDURE[dbo].[pr_Tbl_Test_Insert]@guididuniqueidentifieroutput,@snamenvarchar(50)ASDECLARE@NewIDUNIQUEIDENTIFIERSET@NewID=newid();--在表中插入一个新行。插入[dbo].[Tbl_Test]([id],[name])VALUES(@NewID,@sname);SET@guidid=@NewIDandC#SqlParameteroutparam=cmd.Parameters.Add("@guidid",SqlDbType.UniqueIdentifier);outparam.Direction=ParameterDirection.Output;cmd.Parameters.AddWithValue("@sname","mehdi");md.ExecuteNonQuery();MessageBox.Show(_id.Value.ToString());但它首先不返回任何东西——如果它是一个输出参数,你不能在C#中使用.AddWithValue——你需要使用:SqlParameteroutParam=cmd.Parameters.Add("@guidid",SqlDbType.Uniqueidentifier);outParam.Direction=ParameterDirection.Output;而且,在您的T-SQL代码中,您需要将新值分配给输出参数!ALTERPROCEDURE[dbo].[pr_Tbl_Test_Insert]@guididuniqueidentifier输出,@snamenvarchar(50)ASDECLARE@NewIDUNIQUEIDENTIFIERSET@NewID=newid();--在表中插入一个新行。插入[dbo].[Tbl_Test]([id],[name])VALUES(@NewID,@sname);SET@guidid=@NewIDUPDATE:如果您在SQLServerMgmtStudio中运行它-它会显示任何内容吗?DECLARE@insertedIDUNIQUEIDENTIFIEREXECdbo.pr_Tbl_Test_Insert@guidid=@insertedIDOUTPUT,@sname=N'TestUser'--nvarchar(50)SELECT@insertedIDinyourC#-你必须在调用ExecuteNonQuery后读出输出参数的值!SqlParameteroutparam=cmd.Parameters.Add("@guidid",SqlDbType.UniqueIdentifier);outparam.Direction=ParameterDirection.Outpu吨;cmd.Parameters.AddWithValue("@sname","mehdi");cmd.ExecuteNonQuery();GuidnewlyInsertedID=newGuid(cmd.Parameters["@guidid"].Value);MessageBox.Show(newlyInsertedID.ToString());在执行查询前,需要指定参数的方向,本例输出eg:cmd.Parameters.AddWithValue("@guidid",_id);//_idisSqlGuidcmd.Parameters.AddWithValue("@sname","迈赫迪");cmd.Parameters["@guidid"].Direction=ParameterDirection.Outputcmd.ExecuteNonQuery();MessageBox.Show(cmd.Parameters["@guidid"].Value.ToString());您需要使用允许您指定ParameterDirection的构造函数之一来构造SqlParameter,例如这个。或者,构造参数,然后使用Direction属性设置方向。查看MSDN上的此链接以了解更多详细信息。为什么将@guididuniqueidentifier输出设置为输出参数?这意味着一旦存储过程被执行,它就会覆盖它。如果这是您的意图,那么您需要在插入语句之后添加一条语句,将输出参数设置为您想要的值。像这样:选择@guidid=@generatedID。是的,看看marc_s代码,这就是你应该做的。我也觉得这很令人沮丧,我无法理解这个问题。虽然许多答案是正确的,但有一个简单的行经常被我和其他人忽略,即命令需要存储过程,而不仅仅是任何带参数的sql,所以我希望这会有所帮助:cmd.CommandType=CommandType.StoredProcedure;cmd.Txt应该是这样的:@"my_stored_proct"而不是@"my_stored_proct@p1,@p2,@p3out"所以把它们放在一起。你可能想把它分成几个方法。并添加TimeOuts等。但是,我认为这些是与其他输出参数的命令不同的关键部分。以上就是C#学习教程:在c#中检索SQLServer输出变量共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——using(SqlCommandcmd=newSqlCommand()){cmd.Text=...;cmd.CommandType=CommandType.StoredProcedure;SqlParameteroutParam=cmd.Parameters.Add("@guidid",SqlDbType.Uniqueidentifier);outParam.Direction=ParameterDirection.Output;使用(varconnection=newSqlConnection(this.myConnectionString)){connection.Open();cmd.Connection=连接;尝试{cmd.ExecuteNonQuery();}catch{//把你的sqlcatches等放在这里..throw;}}varoutValue=outParam.Value;//queryoutValueegToString()}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
