将参数传递给SQL Server 2008

时间:2010-12-03 11:09:20

标签: c# sql-server

我正在尝试将参数传递给我的存储过程。他们是这样的

@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。但是找不到它。

3 个答案:

答案 0 :(得分:5)

空字符串应作为""而不是"''"传递。撇号(')将作为字符串值传入,而不是字符串分隔符。 错误消息表明您有一个传递nvarchar的float列。我怀疑@p_latitude和@p_longtitude参数是问题所在。尝试将值直接设置为DBNull.Value。

答案 1 :(得分:2)

我猜测纬度,经度和里程都是浮点数。如果是这样,你需要传递它们:

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

答案 2 :(得分: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();