使用多个字符串参数存储过程mssql

时间:2018-01-17 09:17:32

标签: c# sql-server stored-procedures

我在商店程序中检索多个参数时遇到问题

这是我的代码

enter code here

SqlCommand cmd = new SqlCommand("getdataComport", cnn);


            cmd.CommandType = CommandType.StoredProcedure;

                // set up the parameters
                cmd.Parameters.Add("@ComName", SqlDbType.Text).Direction = ParameterDirection.Output;
                cmd.Parameters.Add("@BaudRate", SqlDbType.Text).Direction = ParameterDirection.Output;
                cmd.Parameters.Add("@batchName", SqlDbType.Text).Direction = ParameterDirection.Output;


                // open connection and execute stored procedure
                cnn.Open();
                cmd.ExecuteNonQuery();

                int retval = (int)cmd.Parameters["@retParam"].Value;
                // read output value from @NewId
                comname = cmd.Parameters["@ComName"].Value.ToString();
                Baudrate = Convert.ToInt32(cmd.Parameters["@BaudRate"].Value);
                batchname = cmd.Parameters["@batchName"].Value.ToString();

                cnn.Close();

这是我的商店程序

ALTER procedure [dbo].[getdataComport]
    @ComName varchar(20) out,
    @BaudRate int out,
    @batchName varchar(20) out 
as


begin 
        select top 1 
                @ComName=ComPortName,
                @BaudRate=BaudRateName,
                @batchName=BatchName
        from tblComPort
        order by Valuedate desc
end 

我跑的时候总是收到错误 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我首先要确保数据类型正确:

cmd.Parameters.Add("@ComName", SqlDbType.VarChar, 20).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@BaudRate", SqlDbType.Int).Direction = ParameterDirection.Output;
cmd.Parameters.Add("@batchName", SqlDbType.VarChar, 20).Direction = ParameterDirection.Output;

并删除:

int retval = (int)cmd.Parameters["@retParam"].Value;

因为:那不存在。

请注意,ExecuteNonQuery 直接 int返回值,但它与来自sproc的return值不同;为此,您需要一个ParameterDirection.ReturnValue的参数。这没有实际意义,因为你的sproc没有return值。