Je veux rechercher un nombre incorporé dans une chaîne dans un champ de notre table de journal en utilisant un paramètre.Comment utiliser 'Like' avec un paramètre
select * from vwLogs où log_time> '02/24/2009' et message comme ('% 2009022508241446%)
Je sais comment utiliser les paramètres lorsque la clause where est un signe égal, mais pas vous comment le faire avec « Like »
cela ne semble pas droit
WHERE message like ('%@ErrorMessage%')
J'ai juste essayé cela et cela n'a pas fonctionné. La seule chose nouvelle est la recherche de messages partie
protected void btnRunQuery_Click(object sender, EventArgs e)
{
string strConn, strSQL;
strConn = @";";
strSQL = @"SELECT * FROM weblogs.dbo.vwlogs WHERE Log_time >= @BeginDate AND Log_Time < @EndDate AND ([email protected] OR @UserName IS NULL) AND (message like '%' + @ErrorNumber + '%' OR @ErrorNumber IS NULL) ORDER BY Log_time DESC";
using (SqlConnection cn = new SqlConnection(strConn))
{
SqlCommand cmd = new SqlCommand(strSQL, cn);
cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
cmd.Parameters.AddWithValue("@ErrorNumber", txtErrorNumber.Text);
cmd.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value =
DateTime.Parse(txtBeginDate.Text).Date;
cmd.Parameters.Add("@EndDAte", SqlDbType.DateTime).Value =
// add one to make search inclusive
DateTime.Parse(txtEndDate.Text).Date.AddDays(1);
cn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
GridView1.DataSource = rdr;
GridView1.DataBind();
cn.Close();
}
}
Merci pour l'aide
Je suis que cela fonctionne
if (string.IsNullOrEmpty(txtUserName.Text))
{
cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = DBNull.Value;
}
else
{
cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = txtUserName.Text;
}
if (string.IsNullOrEmpty(txtErrorNumber.Text))
{
cmd.Parameters.Add("@ErrorNumber", SqlDbType.VarChar, 50).Value = DBNull.Value;
}
else
{
cmd.Parameters.Add("@ErrorNumber", SqlDbType.VarChar, 50).Value = txtErrorNumber.Text;
}
ouais cela a fonctionné très bien alors j'ai eu l'idée de pouvoir rechercher par numéro de journal et écrou juste nom d'utilisateur et c'est quand j'ai commencé à avoir des problèmes parce que le numéro d'erreur est incorporé dans une chaîne. –
Maintenant, j'obtiens ce message d'erreur Erreur Le type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre 'System.DBNull' et 'string' –
D'oh! J'ai oublié la petite bizarrerie. C'est vrai que vous devez l'étendre dans une construction if/else plus longue plutôt que dans l'opérateur ternaire sympa et concis. –