System error при insert

Неудачник1
Дата: 21.02.2006 13:57:20
При вставке новых строк в табличку получаю злостный exception "System Error" на предпоследней строчке
Где ошибка?

        Dim cmdInsVS As SqlCommand = New SqlCommand()
        cmdInsVS.CommandText = "Insert into VacancySkill (VacancyId,SkillId) values (@pVacancyId,@pSkillId)"
        cmdInsVS.Connection = cnObj.cn

For i = 0 To CType(lbSkills.DataSource, DataTable).Rows.Count - 1
         cmdInsVS.Parameters.Add(New SqlParameter("@pVacancyId", SqlDbType.Int, 4)).Value = id.ToString
         cmdInsVS.Parameters.Add(New SqlParameter("@pSkillId", SqlDbType.Int, 4)).Value = CType(CType(lbSkills.DataSource, DataTable).Rows(i).Item("SkillId"), String)
         daSkillsVacancy.InsertCommand = cmdInsVS
         daSkillsVacancy.InsertCommand.ExecuteNonQuery()
next

ППП
Дата: 21.02.2006 14:25:53
Непонятно, что вставляется в параметры?
Неудачник1
Дата: 21.02.2006 15:00:45
Всавляются значения из другой таблицы. Значения я проверял - нормальные
Вот скрипт таблицы в которую производится вставка:

CREATE TABLE VacancySkill] (
	VacancyId int NOT NULL ,
	SkillId int NOT NULL ,
	CONSTRAINT PK_VacancySkill PRIMARY KEY  CLUSTERED 
	(
		[VacancyId],
		[SkillId]
	)  ON PRIMARY )

И в цикле я эту табличку пытаюсь забить.
Проблема возникает на втором шаге цикла:
            cmdInsVS.Parameters.Add(New SqlParameter("@pVacancyId", SqlDbType.Int, 4)).Value = id.ToString
            cmdInsVS.Parameters.Add(New SqlParameter("@pSkillId", SqlDbType.Int, 4)).Value = CType(CType(lbSkills.DataSource, DataTable).Rows(i).Item("SkillId"), String)
            daSkillsVacancy.InsertCommand = cmdInsVS
            daSkillsVacancy.InsertCommand.ExecuteNonQuery()
Hratchia
Дата: 21.02.2006 15:07:20

На втором круге у команды уже есть параметры, а ты пытаешься их снова
впихнуть туда.

тебе надо до цикла создать параметры, а в цикле менять их значения


Posted via ActualForum NNTP Server 1.3

Hratchia
Дата: 21.02.2006 15:15:19
Dim cmdInsVS As SqlCommand = New SqlCommand()
cmdInsVS.CommandText = "Insert into VacancySkill (VacancyId,SkillId) values (@pVacancyId,@pSkillId)"
cmdInsVS.Connection = cnObj.cn
cmdInsVS.Parameters.Add(New SqlParameter("@pVacancyId", SqlDbType.Int, 4))
cmdInsVS.Parameters.Add(New SqlParameter("@pSkillId", SqlDbType.Int, 4))

daSkillsVacancy.InsertCommand = cmdInsVS


For i = 0 To CType(lbSkills.DataSource, DataTable).Rows.Count - 1
 cmdInsVS.Parameters.("@pVacancyId").Value =id.ToString
 cmdInsVS.Parameters.("@pSkillId").Value = CType(CType(lbSkills.DataSource, DataTable).Rows(i).Item("SkillId"), String)
daSkillsVacancy.InsertCommand.ExecuteNonQuery()
next 
 

Неудачник1
Дата: 21.02.2006 15:20:05
Похоже сам разобрался.
В цикле не надо было каждый раз добовлять парамсы, надо было перед циклом.
А внутри менять значения параметров. Тяжело дается это АДО .НЕТ.))

А еще вопрос. Вот никак не допрет до меня как лучше сделать.
Есть БД с несколькими связаными таблицами, причем есть отшение многие к многим. Одна главная таблица - все остальные справочники.
На гланой форме загружаю все в Датагрид из View созданной на MS SQL/
Теперь кликаю на одну запись для изменения. В форме редактирования для каждой таблицы создал dataAdapters, и все cгрузил в датасет.
С мемберми датасетов связал контролы. и в них делаю изменнеия.
Вопрос: Как теперь эти изменения зафиксировать в базе? Для каждой таблицаы писать инсерт апдейт делит. и потом executenonquery?
Но как то не красиво получается.