PDA

View Full Version : سوال: جستجو در بانک اطلاعاتی حساس به حروف



JustAcMilan
جمعه 23 فروردین 1392, 18:04 عصر
با سلام من متد جستجو در بانک اطلاعاتی sql server 2008 رو بصورت زیر نوشتم ولی نمی دونم چرا حساس به حروفه (نمی خوام باشه) لطفا راهنماییم کنید

void search()
{
string query = null;
try
{
switch (comboBox1.Text)
{
case "Fisrt name": { query = "SELECT id,name,family,phone FROM phoneTable WHERE name like '" + textBox1.Text + "%'"; break; }
case "Last name": { query = "SELECT id,name,family,phone FROM phoneTable WHERE family like '" + textBox1.Text + "%'"; break; }
case "Phone number": { query = "SELECT id,name,family,phone FROM phoneTable WHERE phone like '" + textBox1.Text + "%'"; break; }
default: { break; }
}

con = new SqlConnection(connect);
con.Open();
command = new SqlCommand();
command.CommandText = query;
command.Connection = con;
adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
objDataTable = new DataTable();
adapter.Fill(objDataTable);
con.Close();
dataGridView1.DataSource = objDataTable;
}
catch { MessageBox.Show("File Not Found"); }
}

JustAcMilan
شنبه 24 فروردین 1392, 14:03 عصر
یه پهلوون پیدا نمیشه جواب مارو بده

massar
شنبه 24 فروردین 1392, 14:25 عصر
سلام دوست عزیز

حساسیت به کوچکی و بزرگی حروف در sqlserver مربوطه به collation هر ستونه، اگه بخوای این مسئله رو در سطح دیتابیس حل کنی باید بری و collation ستون رو عوض کنی.
در مورد collation ها در اینباره، collation ها میتونن حساس به کوچکی بزرگی یا Case Sensitive یا غیر حساس یا Case Insensitive باشن که با دوحرف در انتهای نام collation مشخص شده مثلا SQL_Latin1_General_CP1_CS_AS حساس به کوچکی و بزرگی ولی SQL_Latin1_General_CP1_CI_AS غیر حساس به کوچکی و بزرگی حروف است.
راه حل دوم بدون اینکه بخوای به دیتابیس دست بزنی اینه که کوئری رو اینطوری تغییر بدی:

SELECT id,name,family,phone FROM phoneTable WHERE Lower(name) like Lower('harchi')


اینطوری مثلا name قبل از مقایسه به حروف کوچک تبدیل میشه

JustAcMilan
یک شنبه 25 فروردین 1392, 13:24 عصر
سلام دوست عزیز

حساسیت به کوچکی و بزرگی حروف در sqlserver مربوطه به collation هر ستونه، اگه بخوای این مسئله رو در سطح دیتابیس حل کنی باید بری و collation ستون رو عوض کنی.
در مورد collation ها در اینباره، collation ها میتونن حساس به کوچکی بزرگی یا Case Sensitive یا غیر حساس یا Case Insensitive باشن که با دوحرف در انتهای نام collation مشخص شده مثلا SQL_Latin1_General_CP1_CS_AS حساس به کوچکی و بزرگی ولی SQL_Latin1_General_CP1_CI_AS غیر حساس به کوچکی و بزرگی حروف است.
راه حل دوم بدون اینکه بخوای به دیتابیس دست بزنی اینه که کوئری رو اینطوری تغییر بدی:

SELECT id,name,family,phone FROM phoneTable WHERE Lower(name) like Lower('harchi')


اینطوری مثلا name قبل از مقایسه به حروف کوچک تبدیل میشه

با تشکر از پاسخگویی شما
اگه توجه کرده باشین این متد جستجو هست، پس تبدیل به حروف کوچک یا بزرگ غیر منطقی هستش
اگه امکان داره تنظیم collation دیتابیس رو بگید چطوری انجام بدم

massar
یک شنبه 25 فروردین 1392, 13:33 عصر
نمیفهمم چرا غیر منطقی هست این روش دقیقا برا سرچ بکار میره.
collation رو میشه از properties دیتابیس تغییر داد، اگر درست نشد بریو در design جدول و collation ستون رو تغییر بدین. یکم بگردین پیداش میکنین.

JustAcMilan
یک شنبه 25 فروردین 1392, 14:04 عصر
نمیفهمم چرا غیر منطقی هست این روش دقیقا برا سرچ بکار میره.
collation رو میشه از properties دیتابیس تغییر داد، اگر درست نشد بریو در design جدول و collation ستون رو تغییر بدین. یکم بگردین پیداش میکنین.
منظور بدی نداشتم
منظورم یه کار حرفه ای تر بود
با تشکر از شما