C# SQL 输出代码问题

标签 c# sql .net sql-server stored-procedures

我对下面的代码有问题,我不断收到

"Procedure or function 'InsertFile' Expects parameter '@ID', which was not supplied"

我一定是在返回 ID 时做错了什么。

ALTER PROCEDURE [dbo].[InsertFile] 
-- Add the parameters for the stored procedure here
    --@AssetID INT,
    @ComputerName varchar(max),
    @FilePath varchar(max),
    @Owner varchar(100),
    @Size int,
    @Extension varchar(50),
    @CreationDate datetime,
    @ModifiedDate datetime,
    @AccessedDate datetime,
    @ID int output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF NOT EXISTS (SELECT * From DC_Files Where computerName = @ComputerName AND FilePath = @FilePath)
BEGIN   
    INSERT INTO DC_Files (ComputerName, FilePath, Owner, Size, Extension, CreationDate, ModifiedDate, AccessedDate)
        VALUES (@ComputerName, @FilePath, @Owner, @Size, @Extension, @CreationDate, @ModifiedDate, @AccessedDate)
END
ELSE
BEGIN
    UPDATE DC_Files
    SET Owner = @Owner, Size = @Size, CreationDate = @CreationDate, ModifiedDate = @ModifiedDate, AccessedDate = @AccessedDate
    WHERE computerName = @ComputerName AND FilePath = @FilePath
END
SET @ID = SCOPE_IDENTITY()
END

C#代码:

SqlCommand cmd = new SqlCommand("InsertFile",conn);
cmd.CommandType = CommandType.StoredProcedure;

//cmd.Parameters.AddWithValue("@AssetID", FileInfo);
cmd.Parameters.AddWithValue("@ComputerName", Environment.MachineName);
cmd.Parameters.AddWithValue("@FilePath", FilePath);
cmd.Parameters.AddWithValue("@Owner", FileSecurity.GetOwner(typeof(NTAccount)).Value);
cmd.Parameters.AddWithValue("@Size", FileInfo.Length);
cmd.Parameters.AddWithValue("@Extension", FileInfo.Extension);
cmd.Parameters.AddWithValue("@CreationDate", FileCreationTime);
cmd.Parameters.AddWithValue("@ModifiedDate", FileModifiedTime);
cmd.Parameters.AddWithValue("@AccessedDate", FileAccessedTime);
var returnParameter = cmd.Parameters.Add("@ID", SqlDbType.Int);
cmd.ExecuteNonQuery();

最佳答案

您必须将方向设置为输出,因为默认情况下所有参数的方向都是输入。

      // Create parameter with Direction as Output
       SqlParameter returnParameter = new SqlParameter("@ID", SqlDbType.Int)
       { 
          Direction = ParameterDirection.Output 
       };

   cmd.Parameters.Add(returnParameter);

关于C# SQL 输出代码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487645/

相关文章:

javascript - 数据表 - 附加附加列引发一些异常错误

c# - 检查字符串的模式是否正确并区分它们

c# - 单例实例

php - 如何从上次交易中获取值(value),但不从今天的交易中获取值(value)

sql - 使用子查询插入多行

java - Oracle 11g sql可以更新语句判断某些列是 ""

.net - 使用 Windows 窗体在按钮上显示工具提示

c# - Exchange 401 未经授权

c# - 在 LINQ 语句中使用 async/await 时实际发生了什么?

c# - MQ 错误原因 : 2058 randomly starts occurring in C# . NET 客户端在正常工作多天后