如何从UPDATE读取值...在C#中输出?

时间:2014-09-26 07:45:25

标签: c# sql ado.net

不幸的是,我无法找到问题来推送更新查询后收到的值。 我有这个SQL命令:

@"if exists (select Id from Documents where Id=3) 
                begin 
                    update Documents set Modified='Jackson',ModifiedDate=(getdate()),Start= getdate(),Finish=(select dateadd(year,Termen,getdate()) from DocumentTypes where [Key]='ITO')
                    output deleted.FilePath as OldFile, inserted.FilePath as NewFile
                    where Id=3
                end"

我试图以

的形式访问它
string old = cmd.Parameters["OldFile"].value;

但它不起作用,我需要另一种解决方案。

如果可以使用

SqlParameter.Direction property

1 个答案:

答案 0 :(得分:0)

你问过是否可以不使用' SqlParameter.Direction'财产,我认为答案是"不,它不是"。无论如何,这就是你如何使用该属性做的事情。首先,您应该在SQL Management Studio中创建SQL命令的存储过程(代码中的内联SQL命令不安全):

CREATE PROCEDURE GetFilePaths
@OldFile nvarchar(1000) output,
@NewFile nvarchar(1000) output
AS

if exists (select Id from Documents where Id=3) 
            begin 
                update Documents set Modified='Jackson',ModifiedDate=(getdate()),Start= getdate(),Finish=(select dateadd(year,Termen,getdate()) from DocumentTypes where [Key]='ITO')
                where Id=3
                set @OldFile = deleted.FilePath
                set @NewFile = inserted.FilePath
            end

然后在你的ADO.net框架解决方案中,你应该有这样的东西:

        public static void GetPaths()
    {
        //substitute DB.GetSqlConnection() for your way of getting your connection
        using (SqlConnection conn = DB.GetSqlConnection())
        {

            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = @"GetFilePaths"
                cmd.CommandType = System.Data.CommandType.StoredProcedure;

                //Declare the output parameters you're gonna use in your stored procedure
                SqlParameter oldFile_param = new SqlParameter("OldFile", System.Data.SqlDbType.NVarChar, 1000);
                oldFile_param.Direction = System.Data.ParameterDirection.Output;
                SqlParameter newFile_param= new SqlParameter("NewFile", System.Data.SqlDbType.NVarChar, 1000);
                newFile_param.Direction = System.Data.ParameterDirection.Output;

                cmd.Parameters.Add(oldFile_param);
                cmd.Parameters.Add(newFile_param);

                cmd.ExecuteNonQuery();

                object oldFile = oldFile_param.Value;
                object newFile = newFile_param.Value;

            }
        }
    }

您需要的文件路径将位于对象oldFile'和'对象newFile'