Как написать хранимую процедуру с параметром, который игнорирует прописные или строчные буквы - PullRequest
1 голос
/ 27 октября 2011

Подскажите, пожалуйста, что с этим не так?

ALTER proc [dbo].[UrunuGetir](@basharf nvarchar(5))
as
     select adi, urunid, kategori 
     from urun 
     where (UPPER(adi) like UPPER('%' +'@basharf'+ '%')) 
           or (LOWER(adi) like LOWER ('%' +'@basharf'+ '%')) 
     order by kategori

Нет ошибок, но также нет данных.

Вот редактирование:

protected void Button1_Click(object sender, EventArgs e) 
{ 
   if (TextBox1.Text != null) 
   { 
      UrunGetir(TextBox1.Text); 
   } 
   else 
   { 
     return; 
   } 
} 

private void UrunGetir(string p)
{
    SqlConnection baglanti = new SqlConnection("....");

    SqlDataAdapter dap = new SqlDataAdapter("select adi, urunid, kategori, birimf from urun where (UPPER(adi) like '%' + UPPER(@basharf) + '%' ) or (LOWER(adi) like '%' + LOWER(@basharf) + '%' ) order by kategori", baglanti);

    dap.SelectCommand.Parameters.Add("@basharf", p);

    if (baglanti.State == System.Data.ConnectionState.Closed)
        baglanti.Open();

    DataTable dt = new DataTable();
    dap.Fill(dt);

    GridView1.DataSource = dt;
    GridView1.DataBind();

    if (baglanti.State == System.Data.ConnectionState.Open)
        baglanti.Close();

    HiddenField1.Value = p.Substring(0,p.Length);
}

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Этот бит:

UPPER('%' +'@basharf'+ '%')

Вы объединяете три строки, поэтому это выражение равно:

UPPER('%@basharf%')

Вы, вероятно, имеете в виду:

'%' + UPPER(@basharf) + '%'

, который объединяет переданный параметр со знаками %

2 голосов
/ 27 октября 2011

У вас нет удобной СУБД, чтобы проверить это, но я думаю, вы захотите поставить % вне функций UPPER и LOWER.

Примерно так:

'%' + UPPER(@basharf) + '%'

Обновление

Поиск в Google SqlDataAdapter заставляет меня думать, что вы используете C #.Я не знаком с этим API базы данных, поэтому не могу предложить никакой помощи там.Тем не менее, в качестве общего совета по устранению неполадок, я бы порекомендовал получить правильный запрос к базе данных, прежде чем пытаться запустить его из кода GUI.

1 голос
/ 28 октября 2011

Спасибо вам, люди, которые ответили на мой вопрос, но, думаю, я нашел решение ...

string kelime = TextBox1.Text;
        char[] oldValue = new char[] { 'i' };
        char[] newValue = new char[] { 'I' };
        for (int sayac = 0; sayac < oldValue.Length; sayac++)
        {
            kelime = kelime.Replace(oldValue[sayac], newValue[sayac]).ToLower();
        }

Чем, как вы упомянули:

SqlDataAdapter dap = new SqlDataAdapter("select adi, birimf, kategori, urunid from urun where (UPPER(adi) like '%' + UPPER(@basharf) + '%') order by kategori", baglanti);
        dap.SelectCommand.Parameters.Add("@basharf", kelime);
...