Вставка double в таблицу с помощью SQL и C#
здесь.
Это на будущее, программу ты всё равно пишешь/правишь единоразово.
У тебя region пустой и колонка должна _RESULT называться? Ошибка говорит об этом (нет такой колонки). Также, попробуй воспользоваться отладчиком и посмотреть, какой в итоге у тебя вызывается SQL, вопросов сразу станет меньше.
Во-первых, ты пишешь запросы руками, так делать нежелательно, лучше использовать Entity Framework. Во-вторых, если пишешь запросы, то пиши их с параметрами, как Это на будущее, программу ты всё равно пишешь/правишь единоразово.
У тебя region пустой и колонка должна _RESULT называться? Ошибка говорит об этом (нет такой колонки). Также, попробуй воспользоваться отладчиком и посмотреть, какой в итоге у тебя вызывается SQL, вопросов сразу станет меньше.
Итоговая таблица в зависимости от региона будет иметь название UK_RESULT или FR_RESULT.
Параметр не пустой, просто часть кода, в которой его задаю, я заменила многоточием.
Так какой скл-код в итоге выполнился?
Первый, там, где всего один столбец. Второй - мои попытки придать в работающий алгоритм заполнение столбика дополнительных величин.
Ну если внимательно посмотреть, то колонка там у тебя тоже одна, так что ошибка вполне закономерная.
Немного не понимаю, откуда ясно, что была всего одна? Откуда видно количество колонок? Ведь значения я вставляю через запятую.
Кому чего придать? Ну впиши какое-нибудь название колонки и посмотри, что выйдет
Автору, сделай вот как:
string request="INSERT INTO [" + REGION + "_RESULT] VALUES ('" + CODE[j] + "')";
Console.WriteLine(request); // или как угодно еще сохрани строку запроса
cmd = new SqlCommand(request, conn);
А потом запости сюда, как заполнена переменная request.
Да, было такое дело, отвык выполнять работу отладчика в уме.
Издеваются над девушкой в этой конторе. , ты хоть потребуй прибавки к зарплате за вредность
конечно, надо писать в скобках названия колонок. если порядок колонок в таблице строго не совпадает с порядком вставляемых значений.это вам подтвердит еще 1 девушка-программист
для каждой пары code, value заново создается sqlCmd? (судя по отрывкам кода).
трагедия белой эмиграции
cmd = new SqlCommand("INSERT INTO [" + REGION + "_RESULT] (CODE, VAL) VALUES ('" + CODE[j] + "', " + VAL[j] + ")", conn);
Получаю
There are fewer columns in the INSERT statement than values specified in the VALUES clause.
Вновь прошу помощи. Раньше код работал, но сейчас перестал, хотя не менялась ни таблица, ни код. Что тут не так?Формат числа с запятой. Вообще запросы в SQL лучше писать с ? внутри, а потом проставлять параметры. Вот примерно как это делается, в документацию лень залезать:
.... "INSERT INTO TABLE (CODE, VAL) VALUES(?, ?)" ....
var parameter = cmd.CreateParameter;
parameter.Value = CODE[j];
cmd.Parameters.Add(parameter);
....
Поясни, пожалуйта, что за формат, как его правильно дать в таблицу?
Поясни, пожалуйта, что за формат, как его правильно дать в таблицу?Напиши:
double d = 1111.555;
Console.Out.WriteLine("" + d);
У тебя на компьютере, на котором "не работает" стоит русская локализация, и при сложении строки с double вместо точки ставится запятая. Поэтому запрос в базу не работает. Я тебе написал, как лучше сделать, чтобы везде работало, замени в запросе все числа на ?, и добавь их параметрами.
Если программа работает в английской системе, то (12.4).ToString = "12.4"
Если же в русской, то (12.4).ToString = "12,4"
Получается, что во втором случае у тебя как бы три аргумента у VALUES:
INSERT ... VALUES ('xxx',12,4)
Вот на это и жалуется SQL Server: колонок перечислено две, а значений - три.
"правильное" решение этой проблемы - не формировать строку SQL запроса самой, а оформлять параметры SQL-запроса как SqlParameter.
CODE[j] = "',0); DROP TABLE Clients;"
?
cmd = new SqlCommand("INSERT INTO [" + REGION + "_RESULT] VALUES (@param1, ...)", conn);
...
cmd.Parameters.AddWithValue("@param1", value1);
cmd.ExecuteНеПомнюЧто;
А вообще, не надо ее учить - справляясь с нашей помощью с заданиями она убеждает руководство использовать ее вместо того, чтоб нанять нормального программиста, а ей заниматься своим делом
И вообще, девушкам-программистам положено помогать и всячески их любить
слушай, тебе тут вроде несколько раз говорили, чтобы ты не сторила запросы путем конкатенации строк. Так писать НЕЛЬЗЯ. Заботай уже именованные/неименованные параметры.
Нанимать программиста начальство не хочет, т.к. очень уж задача маленькая. Вот и ставят задачу: сделай, чтобы работало. Вот она и сидит, колбасит код помаленьку
Ни о каком рефакторинге говнокода речи не идет - иначе бы наняли программиста. Надо за 15 минут доработать программу напильником. Насколько этот подход достоин - не мне судить, не зная ситуации. Но отвечать на такие простые вопросы, помогать решать такие простые проблемы - иногда приятно, мозг отдыхает
А насчет "может нравится" - если б нравилось, давно бы уже книжку любую прочитала, или хотя бы спросила, что почитать. Ну а ответить на простой вопрос - почему нет. Просто у нее это в тенденцию превращается, и именно поэтому считаю, что это плохо (для нее)
ага, а потом после N маленьких изменений появляется большая задача, с которой она заведомо не справится. Таки наймут программиста, которому придется кроме того, что задачу делать еще и переписывать много всего. И даже не потому, что ему код скажем не нравится, а потому, что она много чего сделала совсем неправильно/испортила - вспомним первый ее вопрос в разделе про смену типа колонки. Ну подумаешь, данные запорола...Полностью согласен. Но это все претензии к начальству, а не к самой .
А насчет "может нравится" - если б нравилось, давно бы уже книжку любую прочитала, или хотя бы спросила, что почитать. Ну а ответить на простой вопрос - почему нет. Просто у нее это в тенденцию превращается, и именно поэтому считаю, что это плохо (для нее)Верно подмечено, вряд ли ей нравится программировать. Скорее, хочет как можно скорее и как можно меньшей кровью решить задачу и вернуться к чему-то более понятному и интересному.
Однако я не перестану отвечать на вопросы в этом форуме, и, думаю, не я один
не наезжайте на девушку, все когда-то начинают.
когда отвечаете на вопросы, кидайте еще ссылку на книгу или страничку мсдн, где это можно прочитать.
а автору советую искать ответ на других форумах, там как-то подоброжелательнее народ.
Насчет тестовой/не тестовой базы - да разницы нет в принципе. Вопрос в подходе. Ей надо было вытянуть данные в нужном формате, но она вбила себе в голову, что надо поменять тип данных в таблице. Тут у нее не получилось, но легко поверю, что были случаи, когда это получалось - иначе бы не настаивала на подходе.
Насчет других форумов Тут к ней относятся более чем доброжелательно Возьмем, скажем, sql.ru. Сначала ее бы туда-сюда пинали, ибо она не знает с какими системами работает и тд. Пусть в итоге попала бы в MSSQL - там есть такой модер Glory. Умнейший мужик, кучу полезных статей написал. Но вот он не любит тупые вопросы и думать за автора, что ему нужно, ну и довольно резко отвечает. За попытки натолкнуть людей на путь истинный (чтоб человек разобрался и задал вопрос по существу) его новички просто ненавидят. Не раз встречал темы с обсуждением "что за мудак"
Оставить комментарий
maximovega
Подскажите, пожалуйста, что делаю не совсем корректно?В наличии имелся код, создающий таблицу с одним-единственным столбцом
string REGION;
List<string> CODE = new List<string>
...
cmd = new SqlCommand("INSERT INTO [" + REGION + "_RESULT] VALUES ('" + CODE[j] + "')", conn);
Мне хочется добавить соответствующее значение к каждому CODE, и я меняю его следуюшим образом
string REGION;
List<string> CODE = new List<string>
List<double> VAL = new List<double>
...
cmd = new SqlCommand("INSERT INTO [" + REGION + "_RESULT] VALUES ('" + CODE[j] + "', " + VAL[j] + ")", conn);
Ошибка, которую получаю на выходе: Column names or number of supplied values do not match the table definition.
В базе данных нужный столбец нужного типа добавить удалось, но в чем тогда несоответствие?