2010-12-03 6 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

Попробуйте использовать DbType.String вместо SqlDbType.NVarChar

Ну на самом деле, это то, как я это делаю (все они были в разных слоях, так что я предлагаю вам сделать то же самое):

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

Пустые строки должны быть переданы как "" не "''". Апострофы (') будут передаваться как строковое значение, а не как разделители строк. В сообщении об ошибке говорится, что у вас есть столбец с поплавком, в котором вы передаете nvarchar. Я подозреваю, что параметры @p_latitude и @p_longtitude являются проблемой. Попробуйте установить значение непосредственно как DBNull.Value.

2

Я предполагаю, что широта, долгота и мили являются числами с плавающей запятой. Если это так, вам необходимо передать их как таковые:

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