C# 如何使用忽略区分大小写的参数编写存储过程

C# 如何使用忽略区分大小写的参数编写存储过程,c#,sql,parameters,sql-like,C#,Sql,Parameters,Sql Like,你能告诉我这个有什么问题吗 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

你能告诉我这个有什么问题吗

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);
}
此位:

UPPER('%' +'@basharf'+ '%')
您将连接三个字符串,因此此表达式等于:

UPPER('%@basharf%')
你可能是说:

'%' + UPPER(@basharf) + '%'
它将传入的参数与
%
符号连接起来。

此位:

UPPER('%' +'@basharf'+ '%')
您将连接三个字符串,因此此表达式等于:

UPPER('%@basharf%')
你可能是说:

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

它将传入的参数与
%
符号连接起来。

没有一个DBMS来检查这一点,但我认为您需要将
%
放在
上部
下部
函数之外

像这样:

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

更新


谷歌搜索SqlDataAdapter使我觉得你在使用C。我不熟悉那个数据库API,所以我无法提供任何帮助。但是,作为一个常见的故障排除技巧,我建议在尝试从GUI代码中运行查询之前,仅对数据库进行正确的查询。

没有DBMS方便地检查这一点,但我认为您应该将
%
放在
上部
下部
函数之外

像这样:

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

更新


谷歌搜索SqlDataAdapter使我觉得你在使用C。我不熟悉那个数据库API,所以我无法提供任何帮助。但是,作为一个常见的故障排除技巧,我建议您在尝试从GUI代码中运行查询之前,仅对数据库进行正确的查询。

感谢您回答了我的问题,但我想我找到了解决方案

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();
        }

感谢你们回答了我的问题,但我想我找到了解决办法

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();
        }


谢谢Dave,但令人惊讶的是,当我搜索“cha”而不是“chai”时,您的更正会返回数据。我不知道为什么,但在db中,它写得像“chai”,我们需要更多的帮助。发布一些数据和如何调用过程的示例。受保护的void按钮1u单击(对象发送者,事件参数e){if(TextBox1.Text!=null){UrunGetir(TextBox1.Text);}否则{return;}}我感到困惑。这看起来像Java,不是一个存储过程调用。谢谢Dave,但令人惊讶的是,当我搜索“cha”而不是“chai”时,您的更正会返回数据。我不知道为什么,但在db中,它写得像“chai”,我们需要更多的帮助。发布一些数据和如何调用过程的示例。受保护的void按钮1u单击(对象发送者,事件参数e){if(TextBox1.Text!=null){UrunGetir(TextBox1.Text);}否则{return;}}我感到困惑。这看起来像Java,不是一个存储过程调用。谢谢Oded,但令人惊讶的是,当我搜索“cha”而不是“chai”时,您的更正会返回数据。我不知道为什么,但在db中它写得像“chai”,我怀疑chai中的最后一个字母实际上不是I,而是小写的“l”。尝试搜索CHAL并查看返回的内容谢谢Oded,但令人惊讶的是,当我搜索“cha”而不是“chai”时,您的更正会返回数据我不知道为什么,但在db中,它写得像“chai”,我怀疑chai中的最后一个字母实际上不是I,而是小写的“l”。尝试搜索CHAL并查看返回的内容在WHERE子句中不需要LOWER()和UPPER()。请注意,下面的答案解释了为什么没有得到结果。我如何忽略sql大小写敏感度?通过使用其中一个,您不需要同时使用这两个。如果使用
大写(adi)
,结果将是大写。然后在你的论点上使用
UPPER
,使它也是大写的。现在一切都是大写的,不必担心小写。如果您选择将所有内容小写,同样的逻辑也适用。我按照您提到的那样做了:将proc[dbo].[UrunuGetir](@basharf nvarchar(5))改为按kategori的顺序从urun中选择adi、urunid、kategori、birmf(UPPER(adi)类似“%+@basharf+%”),并更新参数UPPER()从服务器端但仍然没有数据这会更好:
ALTER proc[dbo].[UrunuGetir](@basharf nvarchar(5))作为选择adi、urunid、kategori、birimo from urun where(UPPER(adi)像“%”+UPPER(@basharf)+'%')
在where子句中不需要LOWER()和UPPER()。请注意,下面的答案解释了为什么没有得到结果。我如何忽略sql大小写敏感度?通过使用其中一个,您不需要同时使用这两个。如果使用
大写(adi)
,结果将是大写。然后在你的论点上使用
UPPER
,使它也是大写的。现在一切都是大写的,不必担心小写。如果您选择将所有内容小写,同样的逻辑也适用。我按照您提到的那样做了:将proc[dbo].[UrunuGetir](@basharf nvarchar(5))改为按kategori的顺序从urun中选择adi、urunid、kategori、birmf(UPPER(adi)类似“%+@basharf+%”),并更新参数UPPER()从服务器端但仍然没有数据这会更好:
ALTER proc[dbo].[UrunuGetir](@basharf nvarchar(5))作为选择adi、urunid、kategori、birimo,从urun中选择(UPPER(adi)如“%”+UPPER(@basharf)+%”等)