2014-10-05 2 views
0

Я пытаюсь найти первый столбец нуля в записи, а затем сохранить данные в нем.Проверка, если столбец null с SQL

Мой код будет работать в первый раз и сохранить данные в первом столбце, после чего он ничего не делает. Есть предположения?

var col = 1; 

     var emptyCheck = "SELECT * FROM Pictures WHERE P" + col + " IS NULL AND ID=" + WebSecurity.CurrentUserId; 

        while (db.QueryValue(emptyCheck) == 0) { 

        col++;  

        }; 

        if (db.QueryValue(emptyCheck) == 1) { 
         var update = "UPDATE Pictures SET P" + col + "='" + path + "' WHERE ID=" + WebSecurity.CurrentUserId; 
         db.Execute(update); 
        }; 
+1

«первый пустой столбец в записи, а затем сохранить данные в нем» --- это знак того, что вы не правильно разработали свою модель БД. – zerkms

+0

@zerkms Я новичок в SQL, любые лучшие предложения приветствуются! – Blake

+0

Просто напишите, чего вы пытаетесь достичь - это хорошее начало. Затем посмотрите, как его решить. –

ответ

0

Во-первых, ваш вопрос:

var col = 1; 

Это жесткие коды его только в первом столбце. Вам нужно обернуть свою логику вокруг цикла for.

for (var col = 1; col < MANUAL_LIMIT; col++) { 
    // Rest of your logic goes here 
} 

Как уже упоминалось, если вы предоставите больше информации о проблеме, которую пытаетесь решить, мы сможем дать рекомендации.

2

Основываясь на вашем примере кода и комментариях, я собираюсь предложить более нормализованный подход. Похоже, что ваш стол картинки выглядит как:

Pictures { 
    ID Int, 
    P1 varchar(??), 
    P2 varchar(??), 
    ... 
} 

... Где, я полагаю, P1..Pn равно п столбцов, которые будут содержать пути к некоторым файлам изображений. Как отмечалось в предыдущих комментариях, это не нормируется и плохо развивается. Это может сделать работу, но она не является масштабируемой или эффективной. Посмотрите на this article about normalization в качестве стартера. Если вы переходите на следующее:

Pictures { 
    UserID Int, 
    PictureID Int, 
    PicturePath varchar(??) 
} 

... тогда у вас будет одна строка на изображение для каждого пользователя. (Комбинация UserID и PictureID будет уникальной, поэтому каждый пользователь может иметь PictureID 1, 2 и т. Д.). Тогда вам не нужно беспокоиться о том, чтобы найти «следующий столбец нуля». Вы просто добавляете новую строку для каждого нового изображения.

Следующий пункт ... Предполагая, что вы по какой-то причине сохранили текущую структуру таблицы. (не рекомендуется). Ваша логика показывает, что вы создаете (потенциально) много ненужных вызовов в базу данных. Каждый запрос, который вы запускаете, представляет собой обратную связь с базой данных. Каждый рейс туда и обратно берет ресурсы и время. Когда это возможно, вы должны попытаться уменьшить количество раундов, которые необходимо выполнить вашему приложению. Вы получите лучшую производительность и лучшую масштабируемость.

Последний вопрос ... Один из комментариев, упомянутых в SQL Injection. Код, который вы предоставили, уязвим для атак SQL Injection. Это довольно простой вопрос. Но вам нужно посмотреть и понять, что это такое и почему ваш код уязвим.

Удачи вам!

+0

Спасибо за советы! Я обязательно проверю это! – Blake

Смежные вопросы