Преобразование varchar в monthDate - PullRequest
0 голосов
/ 24 июня 2011

Я получаю это сообщение об ошибке: Преобразование не удалось при преобразовании значения varchar 'monthDate' в тип данных int.

У меня есть этот оператор SQL:

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = 'monthDate' AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30");

, и у меня естьздесь int, значение которого изменяется в зависимости от значения dateLookup:

switch (dateLookup)
        {
            case "January":
                monthDate = 01;
                break;
            case "February":
                monthDate = 02;
                break;
            case "March":
                monthDate = 03;
                break;
            case "April":
                monthDate = 04;
                break;
            case "May":
                monthDate = 05;
                break;
            case "June":
                monthDate = 06;
                break;
            case "July":
                monthDate = 07;
                break;
            case "August":
                monthDate = 08;
                break;
            case "September":
                monthDate = 09;
                break;
            case "October":
                monthDate = 10;
                break;
            case "November":
                monthDate = 11;
                break;
            case "December":
                monthDate = 12;
                break;
        }

Мой вопрос - откуда берется varchar?Например, когда я беру переменную monthDate из оператора SQL и заменяю ее числами 05, все работает нормально.

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

'monthDate' в строке запроса не является переменной.

Я думаю, что это должно быть

String[][] results = lm.SqlSelect("SELECT COUNT(*) FROM members_ WHERE DATEPART(month, DateUnsub_) = " +monthDate + " AND DATEPART(year, DateUnsub_) = 2011 AND DATEDIFF(day, DateJoined_, DateUnsub_) <= 30");

Подумайте об использовании string.Format(), чтобы сделать его более читабельным или еще лучше, параметризованной командой для защиты от SQL-инъекций.

0 голосов
/ 24 июня 2011

Ваш запрос только выбирает Количество строк.Вы ничего не выбрали, когда я смотрю на ваш код t-sql.

после просмотра ваших свойств, пожалуйста, используйте следующий код:

 switch (dateLookup)
    {
        case "January":
            monthDate = "01";
            break;
        case "February":
            monthDate = "02";
            break;
        case "March":
            monthDate = "03";
            break;
        case "April":
            monthDate = "04";
            break;
        case "May":
            monthDate = "05";
            break;

И так далее.На английском языке ставьте кавычки до и после своих чисел.

...