2016-01-25 80 views
1

我有一個簡單的搜索代碼錯誤時傳參數存儲過程

我的存儲過程:

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; 我的代碼無誤運行!

但是當我添加這一行,視覺工作室顯示了一個錯誤:

程序sptest沒有參數並提供的參數。

我的錯誤在哪裏?

+1

首先,改變你的'SqlDbType.Int'到'SqlDbType.NVarChar'。其次,我沒有在您的代碼中看到_any_ sp叫做allmovie。 –

+0

您的stored-proc需要一個'nvarchar(20)'參數,並且您提供了一個'int'類型的參數,您提供了一個'string'值。該表中「model」列的* real *類型是什麼? –

+0

感謝我的錯誤。但我的程序沒有這一行保存: – zapi

回答

1

您的存儲過程需要參數NVARCHAR(20),並且您傳遞INT。這就是問題。所以,我建議你改變你傳遞給SqlDbType.NVarChar的參數的類型。

comm.Parameters.Add("@model", SqlDbType.NVarChar, 20).Value = textBox1.Text; 
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; 
... 

試試這個。

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 
    ... 
    ... 
    ...