2010-12-03 175 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);