将参数传递给存储过程时出错

时间:2016-01-25 08:33:11

标签: c# stored-procedures

我有一个简单的搜索代码

我的存储过程:

CREATE PROCEDURE [dbo].[sptest]
(
    @model NVARCHAR (20)
)
AS
begin
    SELECT * from table where model = @model
end

我在c#中的代码:

SqlCommand comm = new SqlCommand();
comm.CommandType = CommandType.StoredProcedure;
comm.Connection = con;
comm.CommandText = "sptest" ;
comm.Parameters.Add("@model", SqlDbType.Int).Value = textBox1.Text;

如果我删除此行: comm.Parameters.Add("@model", SqlDbType.Int).Value = textBox1.Text;  我的代码运行没有错误!!

但是当我添加这一行时,visual studio会显示错误:

  

程序sptest没有提供参数和参数。

我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

您的存储过程需要NVARCHAR(20)参数,并且您传递INT。这就是问题。因此,我建议您更改传递给SqlDbType.NVarChar的参数类型。

comm.Parameters.Add("@model", SqlDbType.NVarChar, 20).Value = textBox1.Text;

答案 1 :(得分:0)

您的代码:

 SqlCommand comm = new SqlCommand();
            comm.CommandType = CommandType.StoredProcedure;
            comm.Connection = con;
            comm.CommandText = "sptest" ;
            comm.Parameters.Add("@model", SqlDbType.Int).Value = textBox1.Text; 
...

编辑后:

 SqlCommand comm = new SqlCommand();
            comm.CommandType = CommandType.StoredProcedure;
            comm.Connection = con;
            comm.CommandText = "sptest" ;
            comm.Parameters.Add("@model", SqlDbType.NVarChar,20).Value = textBox1.Text; 
...

试试这个。

答案 2 :(得分:0)

参考以下代码

CREATE PROC SPTest
(
@model      NVARCHAR (20)
)
AS

    BEGIN

        SET NOCOUNT ON

        SELECT * FROM <<TABLE_NAME>> WHERE model = @model


    END

C#代码

    SqlConnection con = new SqlConnection("<<ConnectionStringValue>>");
    con.Open();

    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandType = CommandType.StoredProcedure;

    com.CommandText = "SPTest";
    com.Parameters.Add("@model", SqlDbType.NVarChar, 20).Value = "<Parameter Value>";

    SqlDataReader reader = com.ExecuteReader();

    Rest Of Code Goes Here
    ...
    ...
    ...