2016-01-01 34 views
0

這是發生在我通過.net調用具有參數的SQL Server存儲過程時,即使我提供參數。過程或函數'spGetCountryByNames'期望參數'@countryName',這是沒有提供

這裏是我的我的存儲過程的代碼:

create procedure spGetCityByNames 
    @cityName char(10) 
as 
begin 
    select * 
    from tblCity 
    where cityName like @cityName + '%' 
end 

和我的.NET代碼:

SqlCommand cmd = new SqlCommand("spGetCityByNames", con); 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 

cmd.Parameters.AddWithValue("@cityName", TextBox1.Text + "%"); 

con.Open(); 
GridView1.DataSource = cmd.ExecuteReader(); 
GridView1.DataBind(); 
con.Close(); 
+1

歡迎來到Stack Overflow。顯示你的'spGetCountryByNames'程序,而不是'spGetCityByNames'。錯誤消息指向_that_過程。請閱讀[FAQ]和[ask]作爲開始。 –

+0

使用varchar(10)怎麼樣? –

+0

對不起,我試過它與國家第一,然後由城市.. –

回答

0

下面的代碼行%是不必要的,因爲你已經具有包含在你的程序代碼where cityName like @cityName + '%' 。它應該只是

cmd.Parameters.AddWithValue("@cityName", TextBox1.Text.Trim()); 

另外,嘗試使用VARCHAR代替CHAR和使用cmd.Parameters.Add()方法,而不是AddWithValue()

更改PROC代碼有VARCHAR

create procedure spGetCityByNames 
@cityName varchar(10) 
as 
begin 
    select * from tblCity 
    where cityName like @cityName + '%' 
end 

在後面的代碼有

cmd.Parameters.Add("@cityName", SqlDbType.VarChar, 10).Value = TextBox1.Text.Trim(); 

編輯:

從@fabio的每個評論,不,它不是整個代碼的重構。我所猜測的原因和我修改的程序Add()Add()的功能是:

OP有pamameter爲char(10)類型欄和正在使用AddWithValue()方法。 AddWithValue()有一個缺點,它必須推斷參數的類型,大多數情況下,它會推斷類型爲nvarchar,因爲數據來自文本框控件。據我猜測,那裏出現了一些奇怪的現象,所以問題就出現了。

我知道我的猜測/解釋不符合確切的錯誤消息,它是一個計算的猜測,但看看是什麼,它按我的預期工作。

+0

感謝它解決了! –

+1

@Rahul,你能解釋爲什麼會拋出「Missing parameter」異常,甚至會添加同名的參數嗎?你的回答看起來更像是OP的代碼 – Fabio

+0

@Fabio的重構,不,它不完全。如果有幫助,請參閱編輯答案。 – Rahul

相關問題