2010-12-03 170 views
0

我想將參數傳遞給我的存儲過程。他們都是這樣將參數傳遞給SQL Server 2008

@p_latitude='',@p_longitude='',@p_miles='',@p_searchtext='',@p_maptownid=182,@p_regionid=0 

從代碼我傳遞的參數,如

cmd.Parameters.Add("@p_latitude", SqlDbType.NVarChar).Value="''"; 
cmd.Parameters.Add("@p_longitude", SqlDbType.NVarChar).Value="''"; 
cmd.Parameters.AddWithValue("@p_miles",0); 
cmd.Parameters.Add("@p_searchtext",SqlDbType.NVarChar).Value="''"; 
cmd.Parameters.AddWithValue("@p_maptownid",maptownid); 
cmd.Parameters.AddWithValue("@p_regionid",0); 

我得到一個錯誤cannot convert navarchar to float。 我試着用不同的方式發送null,string.empty。但沒有找到它。

+1

你的參數是什麼類型?你可以發佈存儲過程參數嗎? – 2010-12-03 11:17:44

回答

0

嘗試使用,而不是SqlDbType.NVarChar

DbType.String

嗯,事實上,這是我要做的事(他們都在不同的層,所以我建議你做同樣的):

List<SqlParameter> parameters = new List<SqlParameter> { }; 

string status = "dummystatus"; 
string date = Datetime.Now; 
parameters.Add(new SqlParameter("@Status", status)); 
parameters.Add(new SqlParameter("@date", date)); 

SqlCommand cmd = new SqlCommand(); 
command.Connection = connection; 

//set the command text (stored procedure name or SQL statement) 
command.CommandText = commandText; 
command.CommandType = commandType; 
foreach (SqlParameter p in parameters) 
{ 
    command.Parameters.Add(p); 
} 
SqlDataAdapter da = new SqlDataAdapter(command); 
DataSet ds = new DataSet(); 

//fill the DataSet using default values for DataTable names, etc. 
da.Fill(ds); 

// detach the SqlParameters from the command object, so they can be used again.   
cmd.Parameters.Clear(); 
5

空字符串應該作爲""而不是"''"傳遞。撇號(')將作爲字符串值傳遞,而不是字符串分隔符。 錯誤消息說你有一個float列,你傳遞一個nvarchar。我懷疑@p_latitude和@p_longtitude params是問題所在。嘗試直接將該值設置爲DBNull.Value。

2

我猜測緯度,經度和里程是浮點數。如果是這樣,你需要通過它們:

cmd.Parameters.AddWithValue("@p_latitude", 0.0); 
cmd.Parameters.AddWithValue("@p_longitude", 0.0); 
cmd.Parameters.AddWithValue("@p_miles", 0.0);