powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в базе по Guid
71 сообщений из 71, показаны все 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
Поиск в базе по Guid
    #39148568
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо уже, за интересный диалог:)
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Shocker.ProТак что преобразовывай строку в guid, а потом форматируй обратно
Единственный вариант?Это вариант исправить имеющийся недостаток алгоритма.

То есть в алгоритме есть системная ошибка, которая заключается в том, что значение, которое будет распознано с помощью TryParse не обязательно может быть использовано для формирования sql запроса. В данном случае некорректно будет работать bit, real и uniqueidentifier. C datetime тоже будут серьезные проблемы, в частности могут быть перепутаны месяц и число. Фактически, можно рассчитывать, что только int отработает нормально.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148576
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается изначальной проблемы - в чем вопрос? Поставь точку останова и посмотри, какой sql-запрос сформировался к выполнению
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148579
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624AxeleronКстати, великолепный образец дыры в безопасности SQL-injection.
Поясните, если не сложно.очень упрощенно говоря, можно в текстбоксе написать
' drop database
и текущая база будет удалена (при достаточности прав). Естественно, можно "наделать" и других "делов".
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148581
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronShocker.Proпропущено...
бобер, выдыхай!
Так может говорить только то кто не наступал на эти грабли (пока).чооо? буквы это всего лишь hex-представление байт, пофиг какой регистр.
но если он у тебя хранится как строка, то ты сам себе злобный буратино.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148643
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyAxeleronпропущено...

Так может говорить только то кто не наступал на эти грабли (пока).чооо? буквы это всего лишь hex-представление байт, пофиг какой регистр.
но если он у тебя хранится как строка, то ты сам себе злобный буратино.
Ступай в свою стихию - на ПТ
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148644
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
или читай выше, что ли...
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39148709
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronСтупай в свою стихию - на ПТ
слив засчитан
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149067
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Как всегда грабли у тех, кто собирает строку запроса, а не использует запрос с параметрами.
Если параметру явно указан тип SqlDbType.UniqueIdentifier, то присваивать ему можно любое строковое представления GUID
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149118
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Promishanya3624пропущено...

Единственный вариант?Это вариант исправить имеющийся недостаток алгоритма.

То есть в алгоритме есть системная ошибка, которая заключается в том, что значение, которое будет распознано с помощью TryParse не обязательно может быть использовано для формирования sql запроса. В данном случае некорректно будет работать bit, real и uniqueidentifier. C datetime тоже будут серьезные проблемы, в частности могут быть перепутаны месяц и число. Фактически, можно рассчитывать, что только int отработает нормально.

Где косячит мой копипастный мозг:)?
Код: 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.
  private string parseinput(string str)
    {
        
        Boolean boolvalue;
        Int32 intvalue;
        float realvalue;
        DateTime datevalue = new DateTime();
        Guid guidvalue = Guid.NewGuid();
        // Create an array of string representations of the GUID.
        string[] stringGuids = { guidvalue.ToString("B"),
                               guidvalue.ToString("D"),
                               guidvalue.ToString("X") };

        // Parse each string representation.
        Guid newGuid;
        foreach (var stringGuid in stringGuids)
        {
            if (Guid.TryParse(stringGuid, out newGuid))
                str += String.Format("Converted {0} to a Guid\n", stringGuid);
            else
                str += String.Format("Unable to convert {0} to a Guid\n",
                                  stringGuid);
        }                            
       
        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";
       
    }
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149126
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в чем?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149127
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Shocker.ProВопрос в чем?
ТС при изучении языка пока не дошел до пункта "Запрос с параметрами"
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149128
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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


В преобразовании, что-то не так делаю...
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149129
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

Это факт!
А параметры указываются после cn.Open();, или все равно?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149133
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Shocker.ProВопрос в чем?
ТС при изучении языка пока не дошел до пункта "Запрос с параметрами"В данном случае это хорошее упражнение, чтобы осознать, что к чему. А то можно и запрос с параметрами не изучать, а сразу к EF перейти, не понимая основ.


mishanya3624В преобразовании, что-то не так делаю...Я вообще сейчас не понимаю, что вы делаете. Нужно отделить этапы:
1) преобразовать из изначальной строки в конкретный тип
2) преобразовать из конкретного типа в строку ДЛЯ запроса
обращаю внимание, что изначальная строка и конечная строка совпадать НЕ ОБЯЗАНЫ.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149135
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по большому счету, я вообще не понимаю, зачем вам эти попытки определить тип исходя из строки. У вас есть конкретный столбец, в котором будет идти поиск. Этот столбец конкретного определенного типа. Так зачем пытаться искать guid в строке с целым значением? все равно он найден не будет. Опять же чревато косяками - пользователь может ввести пару цифр для поиска в текстовой строке, а оно опознается как int и что дальше?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149211
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа по большому счету, я вообще не понимаю, зачем вам эти попытки определить тип исходя из строки. У вас есть конкретный столбец, в котором будет идти поиск. Этот столбец конкретного определенного типа. Так зачем пытаться искать guid в строке с целым значением? все равно он найден не будет. Опять же чревато косяками - пользователь может ввести пару цифр для поиска в текстовой строке, а оно опознается как int и что дальше?
пользователю будут известны значения guid целиком, он должен копипастом просто найти данные по guid'у.

А вкратце, где параметры указываются, при коннекте, или при создании коннекта, или перед запросом?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149218
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Shocker.Proа по большому счету, я вообще не понимаю, зачем вам эти попытки определить тип исходя из строки. У вас есть конкретный столбец, в котором будет идти поиск. Этот столбец конкретного определенного типа. Так зачем пытаться искать guid в строке с целым значением? все равно он найден не будет. Опять же чревато косяками - пользователь может ввести пару цифр для поиска в текстовой строке, а оно опознается как int и что дальше?
пользователю будут известны значения guid целиком, он должен копипастом просто найти данные по guid'у.ваш ответ с моим вопросом ну никак не связан. зачем пользователю искать гуид в столбце, в котором его нет - неясно.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149223
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149228
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Promishanya3624пропущено...

пользователю будут известны значения guid целиком, он должен копипастом просто найти данные по guid'у.ваш ответ с моим вопросом ну никак не связан. зачем пользователю искать гуид в столбце, в котором его нет - неясно.
почему guid нет то, их там море в сотнях таблицах
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149230
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПро параметры
https://msdn.microsoft.com/ru-ru/library/cc280502(v=sql.120).aspx
нет, как в sql работать с параметрами, я в курсе:)
я не пойму где параметризироваться в коде c#, в каком месте мне эти параметры прописывать?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149416
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Shocker.Proпропущено...
ваш ответ с моим вопросом ну никак не связан. зачем пользователю искать гуид в столбце, в котором его нет - неясно.
почему guid нет то, их там море в сотнях таблицахтогда зачем вы пытаетесь обнаружить int, float и т.п.?

Перечитайте внимательно мою мысль. Еще раз - вы выбираете из списка столбец, в котором будет осуществляться поиск. Этот столбец имеет какой-то определенный тип данных. Вы же пытаетесь отформатировать значение в запросе не в соответствии с типом данных столбца , а полагаясь автоматическое определения типа данных, которое пользователь ввел в текстбокс для поиска. Это полная ерунда.

Само по себе автоматическое определение тоже не обязательно право. Как я уже говорил выше, если пользователь ввел 123 в поле поиска, это не обязательно означает, что он хочет искать число в числовом поле, он может хотеть искать фрагмент текста в текстовом поле.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149417
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Shocker.ProПро параметры
https://msdn.microsoft.com/ru-ru/library/cc280502(v=sql.120).aspx
нет, как в sql работать с параметрами, я в курсе:)
я не пойму где параметризироваться в коде c#, в каком месте мне эти параметры прописывать?в sql-запрос
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149463
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Shocker.ProПро параметры
https://msdn.microsoft.com/ru-ru/library/cc280502(v=sql.120).aspx
нет, как в sql работать с параметрами, я в курсе:)
я не пойму где параметризироваться в коде c#, в каком месте мне эти параметры прописывать?
жесть
вся проблема в нежелании использовать параметры
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149487
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
я понимаю , что параметры надо использовать в запросе, но до этого момента, я же должен их как-то обозначить, дать им какое-то значение, вот это где надо прописывать, сам запрос я составлю, имея параметры.

Shocker.Pro
Дело в том, что поиск будет вестись не только по guid, который будет вводиться полностью, но и необходимо чтобы он искал и по словам (ФИО, название организации итд итп) поэтому необходимо автоопределение, чтобы он понимал, ввел guid ищет по guid ввел текст ищет только по тексту ввел число(сумма тех, или иных денег) ищет это число.

pationжесть
вся проблема в нежелании использовать параметры
Да есть желание, надо только малость логики кода понять, где эти параметры определять и в каком виде, я так понял необходимо обозначать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
myConnection.Open();
SqlCommand myCommand = new SqlCommand("your Procedure Name", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add("@orgid", SqlDbType.UniqueIdentifier).Value = orgid;
myCommand.Parameters.Add("@statid", SqlDbType.UniqueIdentifier).Value = statid;
myCommand.Parameters.Add("@read", SqlDbType.Bit).Value = read;
myCommand.Parameters.Add("@write", SqlDbType.Bit).Value = write;
// Mark the Command as a SPROC

myCommand.ExecuteNonQuery();

myCommand.Dispose();
myConnection.Close();
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149501
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624ввел guid ищет по guid ввел текст ищет только по текстуГДЕ происходит этот поиск? в столбце типа int?
Я не видел в вашем коде автоматического определения столбца поиска в зависимости от типа введенных данных.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149508
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Да есть желание, надо только малость логики кода понять, где эти параметры определять и в каком виде, я так понял необходимо обозначать так:вам не нужна хранимая процедура, если вы используете запрос. Я дал ссылку, см. раздел "Использование параметров в предложениях WHERE"
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39149509
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624:)
я понимаю , что параметры надо использовать в запросе, но до этого момента, я же должен их как-то обозначить, дать им какое-то значение, вот это где надо прописывать, сам запрос я составлю, имея параметры.

Shocker.Pro
Дело в том, что поиск будет вестись не только по guid, который будет вводиться полностью, но и необходимо чтобы он искал и по словам (ФИО, название организации итд итп) поэтому необходимо автоопределение, чтобы он понимал, ввел guid ищет по guid ввел текст ищет только по тексту ввел число(сумма тех, или иных денег) ищет это число.

pationжесть
вся проблема в нежелании использовать параметры
Да есть желание, надо только малость логики кода понять, где эти параметры определять и в каком виде, я так понял необходимо обозначать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
myConnection.Open();
SqlCommand myCommand = new SqlCommand("your Procedure Name", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add("@orgid", SqlDbType.UniqueIdentifier).Value = orgid;
myCommand.Parameters.Add("@statid", SqlDbType.UniqueIdentifier).Value = statid;
myCommand.Parameters.Add("@read", SqlDbType.Bit).Value = read;
myCommand.Parameters.Add("@write", SqlDbType.Bit).Value = write;
// Mark the Command as a SPROC

myCommand.ExecuteNonQuery();

myCommand.Dispose();
myConnection.Close();



а что гугл и мсдн забанили?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39151895
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, что не так делаю? тестовое подключение по выборке по guid , пишет, что не может преобразовать значение из string в guid...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
     private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection("Data Source=ADMIN;Initial Catalog=AdventureWorks2012;Persist Security Info=True;User ID=sa;Password=Password11");
            SqlCommand cmd = new SqlCommand("select * from Sales.Store where rowguid = @id", cn);
         
            textBox1.Text = Guid.NewGuid().ToString();
            cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier).Value = textBox1.Text;               
                
            cn.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
        
            DataSet ds = new DataSet();
            da.Fill(ds);

            dataGridView1.DataSource = ds.Tables[0];
            cn.Close();
        }
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152075
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а куда потерялось теперь Guid.Parse?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152341
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: 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.
private string parseinput(string str)
        {
            Boolean boolvalue;
            Int32 intvalue;
            float realvalue;
            DateTime datevalue = new DateTime();
            Guid guid = new Guid();                             

            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 guid))
                return "Guid";
            else
                return "nvarchar";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string datatype = parseinput(textBox1.Text.ToString());
            SqlConnection cn = new SqlConnection("Data Source=ADMIN;Initial Catalog=AdventureWorks2012;Persist Security Info=True;User ID=sa;Password=Password11");
            if (datatype == "Guid")
            {
                SqlCommand cmd = new SqlCommand("select * from Sales.Store where rowguid = @id", cn);

                cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier).Value = textBox1.Text;

                cn.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
            }
        }
    
    
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152366
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что изменилось?
Код: c#
1.
 cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier).Value = textBox1.Text;
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152486
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Спасибо тебе ГУРУ!:) Все получилось, ищет по всему, кроме datetime, что не так(уже и по разному парсить пробовал, никак не хочет)?
Код: 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.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
     private string parseinput(string str)
        {
            Boolean boolvalue;
            Int32 intvalue;
            float realvalue;
            DateTime datevalue = new DateTime();
            Guid guid = new Guid();
                            

            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 guid))
                return "Guid";
            else
                return "nvarchar";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string datatype = parseinput(textBox1.Text.ToString());
            SqlConnection cn = new SqlConnection("Data Source=ADMIN;Initial Catalog=AdventureWorks2012;Persist Security Info=True;User ID=sa;Password=Password11");
            if (datatype == "Guid")
            {
                SqlCommand cmd = new SqlCommand("select * from Sales.Store where rowguid = @id", cn);
                cmd.Parameters.Add("@id", SqlDbType.UniqueIdentifier).Value = Guid.Parse(textBox1.Text); 
                cn.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
            }
            if (datatype == "int")
            {
                SqlCommand cmd = new SqlCommand("select * from Sales.Store where SalesPersonID = @id", cn);
                cmd.Parameters.Add("@id", SqlDbType.Int).Value = Int32.Parse(textBox1.Text);
                cn.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
            }
            if(datatype == "nvarchar")
            {
                SqlCommand cmd = new SqlCommand("select * from Sales.Store where Name LIKE '%'  + @name + '%'", cn);
                cmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = textBox1.Text.ToString();
                cn.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
            }
            if (datatype == "datetime")
            {
                SqlCommand cmd = new SqlCommand("select * from Sales.Store where ModifiedDate = @date", cn);
                cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Parse(textBox1.Text);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
            }
     
        }

     
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152509
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Все получилосьЯ всё еще не вижу смысла парсить значение два раза. Лишнее телодвижение и повторяющийся код в разных методах.

Повторяющийся код в if-ах нужно вынести в отдельный метод.

mishanya3624кроме datetime, что не так(уже и по разному парсить пробовал, никак не хочет)документацию по Datetime.Parse в зубы и вперед
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152510
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624ищет по всему, кроме datetime, что не так(уже и по разному парсить пробовал, никак не хочет)?
Задать правильную культуру (формат даты) на парсинге в DateTime.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152654
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.ParseExact(textBox1.Text, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);


Вроде такой формат, но все равно пустую строку возвращает... формат даты такой - 13.10.2008 11:15:07
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152659
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624все равно пустую строку возвращаетзапрос пустую строку возвращает?

А вы уверены, что в базе есть даты, совпадающие с точностью до миллисекунды с указанной?
Как вообще дата попадает в поле базы? Если через datetime() (sql) или через DateTime.Now (c#), то таким образом вы нужную строку не найдете, так как дата в этом случае с миллисекундами.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152670
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

это все с тестовой Adventures2012,
дата там при создании автоматом ставится getdate ,пробовал и где есть миллисекунды и где нет...
В общем плюнул на парсинг даты и сделал старым добрым запросом, но все же интересно, почему не парсился...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
 SqlCommand cmd = new SqlCommand("select * from Sales.Store where CONVERT(DATETIME, CONVERT(VARCHAR, ModifiedDate, 105))  = @date", cn);

                cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Parse(textBox1.Text);                  
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
                cn.Close();
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152671
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Promishanya3624Все получилосьЯ всё еще не вижу смысла парсить значение два раза. Лишнее телодвижение и повторяющийся код в разных методах.

Повторяющийся код в if-ах нужно вынести в отдельный метод.

mishanya3624кроме datetime, что не так(уже и по разному парсить пробовал, никак не хочет)документацию по Datetime.Parse в зубы и вперед

если я не буду парсить 1 раз , то не смогу делать условия по типам(конечно же я думаю, что щас ахинею сказал), поэтому можно чуть развернутей, как убрать 1 парсинг, чтобы оставить, только в параметрах sql
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39152681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624конечно же я думаю, что щас ахинею сказалконечно, ведь есть такая штука как GetType(). Поэтому, пусть parseinput возвращает object, в котором будет уже распарсенное значение. Я это говорил еще на первой странице топика.
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39153273
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Promishanya3624конечно же я думаю, что щас ахинею сказалконечно, ведь есть такая штука как GetType(). Поэтому, пусть parseinput возвращает object, в котором будет уже распарсенное значение. Я это говорил еще на первой странице топика.
и это готовое значение, я просто подставляю в sqlparameters вместо парсинга Value=Guid.Parse(....) на Value = это значение?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39153284
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39153498
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, что-то не получается через объект распарсенные значения передать.... надо на свежую голову...
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39155848
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как при запуске приложения сделать, чтобы открывалась другая Windows Form, а не та, которая при создании проекта создается?
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39155852
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Project => Properties
...
Рейтинг: 0 / 0
Поиск в базе по Guid
    #39155874
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Спасибо, что-то там не нашел, поменял в Program.cs, до этого мимо глаз все проскальзевала строка.
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в базе по Guid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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