Рейтинг:
2
OriginalGriff
Вы никогда не узнаете, или, по крайней мере, пока продолжаете глотать исключения, которые могут дать вам необходимую информацию:
While MasterReader.Read()
StrArr(0) = (MasterReader("CPF_No".ToString))
StrArr(1) = (MasterReader("Name".ToString))
StrArr(2) = (MasterReader("Designation".ToString))
Try
LvMasterCmd.CommandText = "INSERT INTO LeaveMaster" &
"(CPF_No, Name, Designation, MNT, YR, LeaveStatus)" &
"VALUES ( @CPF_No, @Name, @Designation, @MNT, @YR, @LeaveStatus) ;"
LvMasterCmd.Parameters.AddWithValue("@CPF_No", StrArr(0))
LvMasterCmd.Parameters.AddWithValue("@Name", StrArr(1))
LvMasterCmd.Parameters.AddWithValue("@Designation", StrArr(2))
LvMasterCmd.Parameters.AddWithValue("@MNT", CmbMonth.Text)
LvMasterCmd.Parameters.AddWithValue("@YR", CmbYear.Text)
LvMasterCmd.Parameters.AddWithValue("@LeaveStatus", "N")
LvMasterCmd.ExecuteNonQuery()
Catch ex As Exception
' EXCEPTION SWALLOWED HERE
End Try
End While
Никогда не делайте этого: вы отбрасываете ошибку и любую информацию, которая может помочь вам решить проблему - вы даже скрываете тот факт, что ошибка вообще произошла, поэтому вам просто кажется, что не все обновления произошли...
J_Mohan
Да, я добавил его и запустил код, но никакой ошибки или предупреждения не было получено, и проблема осталась прежней... пожалуйста помочь.
OriginalGriff
Тогда код не выполняется, или вы смотрите не на ту базу данных.
Что показывает отладчик?
J_Mohan
Dibuggre ничего не показывает & код работает гладко, и я использую правильную БД. Каждый раз после выполнения я вижу первую запись EMP_Master в LvMaster. Я чень запустить код в режиме приостановки и нашли после каждого цикла чтения считывает соответствующие записи, т. е.
StrArr(0) = (MasterReader("CPF_No".Метод toString))
StrArr(1) = (MasterReader("Имя".Метод toString))
StrArr(2) = (MasterReader("Обозначение".Метод toString))
OriginalGriff
Если отладчик ничего не показывает, значит, вы используете его неправильно! :смеяться:
Даже негативы здесь важны.
Что именно вы сделали с отладчиком и что он показал? Как и когда вы проверили базу данных?
J_Mohan
Я запускаю код в режиме перерыва, коды работают гладко, и я проверяю БД сразу после выполнения кода, пожалуйста, помогите..
OriginalGriff
Итак, вы поставили точку останова, и вы шагнули через нее - что именно произошло? Я не вижу твоего экрана!
А как вы проверили базу данных? И когда же? После ExecuteNonQuery? После того, как приложение закрылось? Что вы использовали для проверки? Куда ты смотрела?
J_Mohan
Да, сэр, я поставил точку останова для отладки подпрограммы остальной части кода, выполняемой нажатием клавиши F11. Коды выполняются шаг за шагом, и экран не показывает никаких ошибок. Я проверяю БД сразу после закрытия приложения по пути, указанному в строке подключения. БД-это таблица базы данных Access.
OriginalGriff
"не показывать ошибки" не имеет значения: то, что произошло, важно, даже если это ничего не значило.
Не проверяйте базу данных после выхода приложения, проверьте ее непосредственно перед вызовом ExecuteNonQuery и еще раз сразу после него. Как вы проверили? Какой именно файл вы проверили? Какой файл находится в строке подключения?
Рейтинг:
2
Richard Deeming
Вам нужно очистить параметры на каждой итерации цикла.
Вы также можете переместить код, который устанавливает CommandText
вне петли, так как это не меняется.
LvMasterCmd.CommandText = "INSERT INTO LeaveMaster" &
"(CPF_No, Name, Designation, MNT, YR, LeaveStatus)" &
"VALUES ( @CPF_No, @Name, @Designation, @MNT, @YR, @LeaveStatus) ;"
While MasterReader.Read()
StrArr(0) = (MasterReader("CPF_No".ToString))
StrArr(1) = (MasterReader("Name".ToString))
StrArr(2) = (MasterReader("Designation".ToString))
Try
LvMasterCmd.Parameters.Clear() ' <-- ADD THIS LINE
LvMasterCmd.Parameters.AddWithValue("@CPF_No", StrArr(0))
LvMasterCmd.Parameters.AddWithValue("@Name", StrArr(1))
LvMasterCmd.Parameters.AddWithValue("@Designation", StrArr(2))
LvMasterCmd.Parameters.AddWithValue("@MNT", CmbMonth.Text)
LvMasterCmd.Parameters.AddWithValue("@YR", CmbYear.Text)
LvMasterCmd.Parameters.AddWithValue("@LeaveStatus", "N")
LvMasterCmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End While
0x01AA
"Вам нужно очистить параметры", действительно уверены в этом? Это не соответствует моему опыту. Теперь я в замешательстве ...
Richard Deeming
Да:
using (var connection = new SqlConnection("server=.;integrated security=true"))
using (var command = new SqlCommand("SELECT @A", connection))
{
command.Parameters.AddWithValue("@A", 1);
command.Parameters.AddWithValue("@A", 2);
// SqlException: The variable name '@A' has already been declared. Variable names must be unique within a query batch or stored procedure.
}
Поскольку обработчик исключений в цикле проглатывал это исключение, добавлялась только первая запись. Все последующие записи обрывались беззвучно.
0x01AA
Теперь я понял. Большое спасибо.