不幸的是,我无法找到问题来推送更新查询后收到的值。 我有这个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
答案 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'