powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в базе по Guid
25 сообщений из 71, страница 1 из 3
Поиск в базе по Guid
    #39148468
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Есть поиск по базе, все работает, кроме Guid , вот часть кода по поиску:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 private string parseinput(string str)
    {
        
        Boolean boolvalue;
        Int32 intvalue;
        float realvalue;
        DateTime datevalue;
        Guid guidvalue;
        if (Boolean.TryParse(str, out boolvalue))
            return "bit";
        else if (Int32.TryParse(str, out intvalue))
            return "int";
        else if (float.TryParse(str, out realvalue))
            return "real";
        else if (DateTime.TryParse(str, out datevalue))
            return "datetime";
        else if (Guid.TryParse(str, out guidvalue))
            return "Guid";
        else
            return "nvarchar";
       
    }

        private void searchdb()
        {
            listBox3.Items.Clear();
            int tablecount = comboBox1.Items.Count;
            for(int i=0; i<tablecount; i++)
            {
                comboBox1.SelectedIndex = i;
                int columncount = listBox1.Items.Count;
                for(int j=0; j < columncount; j++)
                {
                    listBox1.SelectedIndex = j;
                    listBox2.SelectedIndex = j;
                    string tablename = comboBox1.SelectedItem.ToString();
                    string columnname = listBox1.SelectedItem.ToString();
                    string datatype = parseinput(textBox1.Text.ToString());
                    if(listBox2.SelectedItem.ToString( )== datatype)
                    {
                        if (datatype != "int")
                        {
                            cmd.CommandText = "select " + columnname.ToString() + " from " + tablename.ToString() + " where " + columnname.ToString() + " Like '%" + textBox1.Text.ToString() +"%'";
                        }
                        if(datatype == "Guid")
                        {
                            cmd.CommandText = "select " + columnname.ToString() + " from " + tablename.ToString() + " where " + columnname.ToString() + "='" + textBox1.Text.ToString() +"'";
                        }
                         cn.Open();
                         dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        listBox3.Items.Add(dr[0].ToString()+" Column Name:"+columnname.ToString()+"From Table:"+tablename.ToString());
                        Application.DoEvents();
                        listBox4.Items.Add(cmd.CommandText.ToString());
                    }

                }
                cn.Close();



куда копать, пробовал в запросе и like использовать тоже не находит...
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148475
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guid может распарситься из совершенно разных вариантов строковых представлений

а вот в sql-запрос его надо засовывать в строго определенном формате

Так что преобразовывай строку в guid, а потом форматируй обратно

P.S. Вообще, почему бы методу parseinput возвращать не string, а object
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148476
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624, надо смотреть не различается ли регистр Guid в БД и в запросе.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148477
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак что преобразовывай строку в guid, а потом форматируй обратно
Это не нужно, uniqueidentifier в sql запросе передается как строка, обернутся одинарными кавычками.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148478
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
                        if (datatype != "int")
                        {
                            cmd.CommandText = "select " + columnname.ToString() + " from " + tablename.ToString() + " where " + columnname.ToString() + " Like '%" + textBox1.Text.ToString() +"%'";
                        }
                        if(datatype == "Guid")
                        {
                            cmd.CommandText = "select " + columnname.ToString() + " from " + tablename.ToString() + " where " + columnname.ToString() + "='" + textBox1.Text.ToString() +"'";
                        }


Кстати, великолепный образец дыры в безопасности SQL-injection.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148487
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronЭто не нужно, uniqueidentifier в sql запросе передается как строка, обернутся одинарными кавычками.да, но распарсить ты его можешь, например, из сплошного текста, а вот в sql передавать нужно обязательно в виде '3391568C-1246-48E3-82A7-71302176E392' (по крайней мере в mssql)
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148488
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronmishanya3624, надо смотреть не различается ли регистр Guid в БД и в запросе.бобер, выдыхай!
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148489
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronmishanya3624, надо смотреть не различается ли регистр Guid в БД и в запросе.бобер, выдыхай!
Так может говорить только то кто не наступал на эти грабли (пока).
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148490
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronЭто не нужно, uniqueidentifier в sql запросе передается как строка, обернутся одинарными кавычками.да, но распарсить ты его можешь, например, из сплошного текста, а вот в sql передавать нужно обязательно в виде '3391568C-1246-48E3-82A7-71302176E392' (по крайней мере в mssql)
Если Guid уже в правильном строковом формате, ничего не нужно ни парсить, ни конвертить.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148492
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronShocker.Proпропущено...
да, но распарсить ты его можешь, например, из сплошного текста, а вот в sql передавать нужно обязательно в виде '3391568C-1246-48E3-82A7-71302176E392' (по крайней мере в mssql)
Если Guid уже в правильном строковом формате, ничего не нужно ни парсить, ни конвертить.а если в неправильном? ты код автора-то почитай, не ленись - пользователь может задать giud в виде 3391568C124648E382A771302176E392 - он определится как giud, но sql его не съест
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148493
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronКстати, великолепный образец дыры в безопасности SQL-injection.ну там вообще косяков полно. Например для float косяк с десятичной точкой.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148495
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronShocker.Proпропущено...
бобер, выдыхай!
Так может говорить только то кто не наступал на эти грабли (пока).ок, тогда расскажи, что за грабли. Ибо еще ни разу не сталкивался с ситуацией, где регистр букв в шестнадцатеричных числах имеет значение
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148496
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа если в неправильном? ты код автора-то почитай, не ленись - пользователь может задать giud в виде 3391568C124648E382A771302176E392 - он определится как giud, но sql его не съест
Это в условии задачи не сказано, не нужно фантазировать. По умолчанию, считаем, что в текстбоксе он выглядит как 3391568C-1246-48E3-82A7-71302176E392.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148498
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronпропущено...

Так может говорить только то кто не наступал на эти грабли (пока).ок, тогда расскажи, что за грабли. Ибо еще ни разу не сталкивался с ситуацией, где регистр букв в шестнадцатеричных числах имеет значение
Грабли могут быть в том, что если поиск будет произведен по Guid '3391568C-1246-48E3-82A7-71302176E392', а в базе он будет записан как '3391568c-1246-48e3-82a7-71302176e392', то запись найдена не будет.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148499
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronShocker.Proа если в неправильном? ты код автора-то почитай, не ленись - пользователь может задать giud в виде 3391568C124648E382A771302176E392 - он определится как giud, но sql его не съест
Это в условии задачи не сказано, не нужно фантазировать. По умолчанию, считаем, что в текстбоксе он выглядит как 3391568C-1246-48E3-82A7-71302176E392.так у автора же не работает. Одна из причин может быть как раз написание guid-а сплошным текстом. То есть я пытаюсь ответить автору на изначальный вопрос.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148500
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronShocker.Proпропущено...
ок, тогда расскажи, что за грабли. Ибо еще ни разу не сталкивался с ситуацией, где регистр букв в шестнадцатеричных числах имеет значение
Грабли могут быть в том, что если поиск будет произведен по Guid '3391568C-1246-48E3-82A7-71302176E392', а в базе он будет записан как '3391568c-1246-48e3-82a7-71302176e392', то запись найдена не будет.
Если в настройках самой базы будет установлен Case-sensitive.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148501
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronпропущено...

Это в условии задачи не сказано, не нужно фантазировать. По умолчанию, считаем, что в текстбоксе он выглядит как 3391568C-1246-48E3-82A7-71302176E392.так у автора же не работает. Одна из причин может быть как раз написание guid-а сплошным текстом. То есть я пытаюсь ответить автору на изначальный вопрос.
Все может быть, дождемся автора :)
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148502
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronГрабли могут быть в том, что если поиск будет произведен по Guid '3391568C-1246-48E3-82A7-71302176E392', а в базе он будет записан как '3391568c-1246-48e3-82a7-71302176e392', то запись найдена не будет.ты меня пугаешь, ты чего курил? в базе никаких БУКАВАК различного регистра нет, uniqueidentifier - это бинарный формат
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148504
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, ты мне расскажи, а в строке запроса where ты тоже передаешь Guid (тип CLR, аналогом которому в SQL Server является uniqueidentifier) или все-таки ты преобразуешь в string для передачи? У меня была проблема с БД хостера, которая содержала uniqueidentifier'ы в lower case, и когда я в строке поиска передавал строку в upper case, строка не находилась.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148505
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronкоторая содержала uniqueidentifier'ы в lower caseтвои слова справедливы только в одном случае - если гуиды банально хранились в строковом поле. Поле типа uniqueidentifier бинарное - там по определению не может быть понятия lower case или upper case.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148507
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, что я хочу сказать, что guid - это 128-битное значение и регистр буковок не имеет значения, но у меня от чего-то была такая хрень с хостерской БД.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148509
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть guid в базе был в нижнем регистре, и когда я искал по этому же guid в верхнем регистре, ничего не находилось, когда передавал строку guid в нижнем, находилось. поле было типа uniqueidentifier. Тупо, дико, но как ты объяснишь это?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148511
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronТо есть guid в базе был в нижнем регистре, и когда я искал по этому же guid в верхнем регистре, ничего не находилось, когда передавал строку guid в нижнем, находилось. поле было типа uniqueidentifier. Тупо, дико, но как ты объяснишь это?как вариант - запрос был построен таким образом, что до сравнения guid неявно преобразовывался в строку, а потом уже сравнивался как строка
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148513
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAxeleronТо есть guid в базе был в нижнем регистре, и когда я искал по этому же guid в верхнем регистре, ничего не находилось, когда передавал строку guid в нижнем, находилось. поле было типа uniqueidentifier. Тупо, дико, но как ты объяснишь это?как вариант - запрос был построен таким образом, что до сравнения guid неявно преобразовывался в строку, а потом уже сравнивался как строка
Не помню, кажется, в ХП проблема с where запросом была.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148567
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronmishanya3624, надо смотреть не различается ли регистр Guid в БД и в запросе.
Регистр одинаковый
AxeleronКстати, великолепный образец дыры в безопасности SQL-injection.
Поясните, если не сложно.
Shocker.Proа если в неправильном? ты код автора-то почитай, не ленись - пользователь может задать giud в виде 3391568C124648E382A771302176E392 - он определится как giud, но sql его не съест
GUid в правильном формате uniq

база - mssql

Shocker.ProТак что преобразовывай строку в guid, а потом форматируй обратно
Единственный вариант?
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в базе по Guid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]