我有一个stored procedure
可以制作select
. 我将其SP
用于搜索表单,如果没有传递搜索参数,则返回所有记录。否则,某些字段将被过滤为类型为 的日期DATE
。无论如何,我必须发送字段,如果它们没有值,我将不得不发送它们NULL
。问题是,当我在 中传递类型值DATE
时NULL
,它给了我一个无法转换的错误。我尝试通过以下方式进行操作,但我无法填写我的GV
. 还有其他方法可以做到这一点吗?
protected void BtnSearch_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(Util.ObtenerCadenaConexion("ConnectionString"));
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "ProcListarAnuncio";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Titulo", txtTitulo.Text.Trim() == "" ? null : txtTitulo.Text.Trim());
cmd.Parameters.AddWithValue("@FechaDesde", txtFechaI.Text.Trim() == "" ? null : txtFechaI.Text.Trim());
cmd.Parameters.AddWithValue("@FechaHasta", txtFechaF.Text.Trim() == "" ? null : txtFechaF.Text.Trim());
cmd.Connection = con;
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
而不是使用
null
,你必须通过DBNull.Value
。虽然有点奇怪,但这是NULL
在 ADO.NET 中传递参数的方式: