1

我正在使用VB.NETANDSQL SERVER 2008

我有我需要的对象数组,INSERTSQL SERVER 2008是对象在此处输入图像描述

这个对象将Inserted在三个表中:

  • 第一个表将包含报告信息:[id ,reportName , description , style ] 插入此信息后,我将使用第二个表的@@IDENTITYthisRowFK

  • 第二个表:[id,id_first_table,comment,complete,finished,name,started,outcome]

问题将与第三个表一起出现我如何循环检查清单Element并使用第二个表 ID 将其插入到第三个表中,直到元素末尾

像 :

 [id , id_second_table, 101 ,820] 
 [id , id_second_table'sameid', 101,831]

这是我尝试过的:

 DECLARE @reportId INT , @fieldId INT  

 INSERT INTO    
 dbo.tblReport(strReportName,strReportDescription,strReportStyle,
 strScource,dtmCreated)
 VALUES ('caustic' , 'titration caustic', 'simple table' ,'user' ,  getdate()) 
 SELECT @reportId = @@IDENTITY

 INSERT INTO dbo.tblReportFields   
 (lngReports,strFieldName,bolComment,bolComplete,bolFinished,
 bolOutCome,bolStarted,bolUser)
 VALUES (@reportId ,'caustic titration' , 1,0,1,0,0,0)
 SELECT @fieldId = @@IDENTITY 

 --LOOP AND INSERT ALL THE checklist Element 

  INSERT INTO dbo.tblReportTask (lngReportFields,lngChecklist,lngTask)
  VALUES (@fieldId, 814 , 1443)

任何关于这样做的最佳方式的想法也将被考虑

4

1 回答 1

1

好的,您的信息有点难以处理,因为您的对象和 SQL 语句不完全匹配。但是,这基本上是您的操作方式。我希望你能把它和你的问题联系起来。

这就是插入 Report 和 ReportFields 表的方式。我没有包含 ReportFields 表的 SQL,因为它类似于 Report 之一。

  Dim reportID As Integer = 0
  Dim fieldID As Integer = 0
  Using tmpCONN As New SqlConnection(tmpConnStr)
    Dim tmpSQL As New StringBuilder
    tmpSQL.AppendLine("INSERT INTO dbo.tblReport(strReportName,strReportDescription,strReportStyle,strScource,dtmCreated) ")
    tmpSQL.AppendLine(" VALUES ")
    tmpSQL.AppendLine("(@NAME, @DESC, @STYLE, @SOURCE,@CREATED); ")
    tmpSQL.AppendLine("SELECT SCOPE_IDENTITY() AS ScopeID; ")
    Using tmpCMD As New SqlCommand(tmpSQL.ToString, tmpCONN)
      tmpCMD.Parameters.AddWithValue("@NAME", Obj.Name)
      tmpCMD.Parameters.AddWithValue("@DESC", Obj.Description)
      tmpCMD.Parameters.AddWithValue("@STYLE", Obj.Stype)
      tmpCMD.Parameters.AddWithValue("@SOURCE", Obj.Source)
      tmpCMD.Parameters.AddWithValue("@CREATED", Date.Now)
      reportID = tmpCMD.ExecuteScalar
    End Using

    'Do same type of insert here for the ReportFields table.  Instead of reportID,'
    'it would return fieldID.'


    'This is the loop to insert to Tasks'
    For Each chk As chkObj In Obj.Checklist
      tmpSQL = New StringBuilder
      tmpSQL.AppendLine("INSERT INTO dbo.tblReportTask (lngReportFields,lngChecklist,lngTask) ")
      tmpSQL.AppendLine(" VALUES ")
      tmpSQL.AppendLine("(@FIELD_ID, @CHECK_ID , @TASK) ")
      Using tmpCMD As New SqlCommand(tmpSQL.ToString, tmpCONN)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", fieldID)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", chk.cl_id)
        tmpCMD.Parameters.AddWithValue("@FIELD_ID", chk.ts_id)
        tmpCMD.ExecuteNonQuery()
      End Using
    Next
  End Using
于 2012-08-17T15:06:28.883 回答