Рейтинг:
9
MadMyche
Однако на самом деле способ выяснить, что происходит, - это использовать отладчик и посмотреть, что происходит, что вызывает исключение SqlException; вы назначаете исключение для ex
переменная, но вы на самом деле ничего с ней не делаете.
Так что поставьте точку останова в Ате catch
постройте и посмотрите, что такое фактическое исключение SqlException.
Есть 2 возможности с места в карьер:
1. EXECUTE
предполагается, что ваша команда SqlCommand имеет тип CommandText.StoredProcedure
2. Типы Данных. Все переменные в SP определяются как VARCHAR(50), а передаваемое значение "clothmanufacture" является целым числом. Совпадают ли типы данных в схеме таблицы с объявлениями переменных SP?
LuQman Asif
все типы данных в SP являются varchar(50), но varchar может принимать любой тип значения. разве это не правда?
MadMyche
И да, и нет. Ваши типы должны совпадать на всем пути от C# до SP и табличной схемы.
И после дальнейшего рассмотрения.. Я думаю, что это сама команда SqlCommand; это должно быть только имя SP, никаких параметров или выполнения там быть не должно.
LuQman Asif
вы правы, я изменил это. я отлаживаю его и теперь появляется эта ошибка
Процедура или функция 'insertemplab' ожидает параметр '@Employee_type', который не был указан.
MadMyche
Если значение, которое вы пытаетесь передать, не было определено, параметр не будет присоединен. Он должен быть либо (1) явно определен как dbNull, либо (2) значение по умолчанию должно быть определено в SP.
Но похоже ты уже позаботился об этом
Рейтинг:
21
Rob Philpott
Ну, к сожалению, Ваш код ловит ошибку и избавляется от нее, так что в блоке catch ваше окно сообщения будет лучше возвращать ex.Message.
Но то, как вы называете свой процесс, необычно. Обычно SQL - это просто имя proc с командой.CommmandType устанавливается в SP, как вы уже сделали.
Что происходит, когда вы делаете это:
string qry = "insertemplab";
Я предполагаю, что ваши имена параметров совпадают с именами сохраненного процесса.
EDIT: возможно, Вам также захочется подумать об удалении вашего соединения и команды, в зависимости от того, что обеспечивает функция getConnection ().
Рейтинг:
17
OriginalGriff
Начните с отладчика: поставьте точку останова на линию:
MessageBox.Show("Employee Record could not be added!!!!");
Запустите приложение еще раз, а когда оно остановится, посмотрите на объект исключения
ex
чтобы выяснить, в чем заключается заявленная проблема. Затем используйте отладчик, чтобы посмотреть на передаваемые данные и использовать ошибку, чтобы помочь вам понять, что это такое.
Мы не можем сделать ничего из этого для вас: у нас нет доступа к вашему коду во время его выполнения, у нас нет ваших данных в текстовых полях, у нас нет вашего LaboureClass, и у нас нет вашей базы данных, чтобы попробовать его.
Дайте ему попробовать, и посмотреть, сколько информации вы можете узнать!
LuQman Asif
Не удалось найти хранимую процедуру 'execute insertemplab @Employee_id,@Emplyee_name,@Emplyee_phone,@Employee_address,@Employee_type,@clothmanufacture'.
это сообщение появляется, когда я отлаживаю, применяя break
OriginalGriff
И это говорит вам все, что вам нужно знать...
Когда вы хотите создать хранимую процедуру, она определяет параметры, а не код yoru C#.
Заменить этот:
строка qry = "execute insertemplab @Employee_id,@Emplyee_name,@Emplyee_phone,@Employee_address,@Employee_type,@clothmanufacture";
С этим:
строка qry = "insertemplab";
И попробуй еще раз.
LuQman Asif
Процедура или функция 'insertemplab' ожидает параметр '@Employee_type', который не был указан.
теперь это появляется на debbuging.
OriginalGriff
Поэтому проверьте свой лабораторный объект и посмотрите, что находится в lab.EmployeType
На первый взгляд, это null - вероятно, потому, что у вас есть два объекта с похожими именами, и тот, который вы используете, написан с ошибкой...
LuQman Asif
да, когда я отлаживаю его, он равен нулю. а теперь скажи мне, как я могу ее решить.
OriginalGriff
"Не ставьте в него нуль".
Давай - думай. У меня нет доступа к вашему коду, запущенному или нет, поэтому я не могу сказать: "сделай это, и он это исправит".
Вы знаете, что является симптомом проблемы - lab.EmployeType равен null - так почему же он равен null? Где в вашем коде вы его устанавливаете? Чем вы его устанавливаете? Что показывает отладчик, когда вы смотрите на это? Есть ли у вас еще одно свойство или поле в LaboureClass под названием lab.EmployeeType, которое вы устанавливаете в значение? Если да, то почему у вас есть два объекта недвижимости с такими похожими названиями? Какой из них вы намеревались установить? Чтобы использовать?
Я не могу ответить на них за тебя!
LuQman Asif
извините, что беспокою вас так сильно. я дал значение по умолчанию null каждому полю в классе laboure, теперь я удалю его и попробую еще раз. я очень напряжен, потому что должен представить этот проект завтра. пожалуйста, помогите мне до тех пор, пока этот вопрос не разрешится.
OriginalGriff
Остановитесь и подумайте, а не пробуйте что-то наугад.
Если вы добавите свойство ссылочного типа (т. е. не число или bool), оно по умолчанию будет равно null, если только вы не зададите ему что-то другое. Итак, где именно в вашем коде вы устанавливаете свойству EmployeType (или полю) ненулевое значение?
Вы поставили точку останова на нем, чтобы точно выяснить, что вы устанавливаете? Если нет, то почему? Отладчик попал в ваш код назначения? Если нет, то почему? Подумайте о том, что вы делаете - мы не можем сделать ничего из этого для вас, так как мы не можем запустить ваш код, и эти проблемы возникают только во время его работы. У вас есть отладчик - используйте его!
LuQman Asif
спасибо, братан, за твою помощь, наконец-то он работает. Большое спасибо
OriginalGriff
Всегда пожалуйста!