将参数传递给SQL Server 2008
问题描述:
我想将参数传递给我的存储过程。他们都是这样将参数传递给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。但没有找到它。
答
尝试使用,而不是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();
答
空字符串应该作为""
而不是"''"
传递。撇号('
)将作为字符串值传递,而不是字符串分隔符。 错误消息说你有一个float列,你传递一个nvarchar。我怀疑@p_latitude和@p_longtitude params是问题所在。尝试直接将该值设置为DBNull.Value。
答
我猜测纬度,经度和里程是浮点数。如果是这样,你需要通过它们:
cmd.Parameters.AddWithValue("@p_latitude", 0.0);
cmd.Parameters.AddWithValue("@p_longitude", 0.0);
cmd.Parameters.AddWithValue("@p_miles", 0.0);
你的参数是什么类型?你可以发布存储过程参数吗? – 2010-12-03 11:17:44