2016-09-16 2 views
0

Я хочу спросить о моем кодировании с помощью Vb.Net. Я хочу импортировать данные из моей старой базы данных Foxpro в базу данных SQL Server. Я выбрал все столбцы, которые мне нужно импортировать в базу данных SQL Server из Foxpro. Причина в том, что когда я пытаюсь импортировать данные, я всегда получаю ошибкуVb.Net, SQL Server и Foxpro

Нарушение ограничения PRIMARY KEY 'PK_MsDetail'. Невозможно вставить дублирующий ключ в объект «dbo.MsDetail».

Это мой VB.NET код:

Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click 
    If txtFile.Text = "" Then 
     MsgBox("Cannot be Empty") 
    Else 
     dgData.DataSource = Nothing 
     path = "Q:\umum" & txtFile.Text.Trim & ".DBF" 
     Dim MyConnection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection 
     DtSet = New System.Data.DataSet 
     MyConnection = New System.Data.OleDb.OleDbConnection("Provider=vfpoledb.1; " & 
       "data source='" & "Q:\" & "'; Collating Sequence=general") 

     MyCommand = New OleDbCommand("select Cd_png,cabang,subcabang,noncs,User_i,tgl_pkp,Cycle,Nama,Company,Kota,kota1,kota2,NamaKota,Telepon,Cd_post,User_ti,noncs,report3,report2,report1,report4 from [" & path & "] where cd_png ='" & txtPng.Text & "' and report3 is not null", MyConnection) 
     da = New OleDbDataAdapter(MyCommand) 

     da.Fill(DtSet, "a") 
    End If 

    dgData.DataSource = DtSet.Tables("a") 
End Sub 

Private Sub btnExec_Click(sender As Object, e As EventArgs) Handles btnExec.Click 
     _thread = New Thread(New ThreadStart(AddressOf Ribakkon)) 
     _thread.Start() 
    End Sub 

Private Function cek_ada_ga(ByRef field As String, ByRef TABLE As String, ByRef AWB As String) As Boolean 
    If ConnImport.State = ConnectionState.Closed Then 
     ConnImport.Open() 
    End If 
    Dim cmd As SqlCommand 
    Dim dr As SqlDataReader 
    Dim Nil As Boolean 
    Try 
     cmd = New SqlCommand("select " & field & " from " & TABLE & " where " & field & " = '" & AWB & "' ", ConnImport) 
     dr = cmd.ExecuteReader 
     If dr.Read Then 
      Nil = False 
     Else 
      Nil = True 
     End If 
     dr.Close() 
     cmd.Dispose() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    Finally 
    End Try 
    Return Nil 
End Function 

Private Sub Ribakkon() 
     If ConnImport.State = ConnectionState.Closed Then 
      ConnImport.Open() 
     End If 
     Dim i As Integer 
     For i = 0 To DtSet.Tables("a").Rows.Count - 1 

     If cek_ada_ga("PuNo", "MsData", Microsoft.VisualBasic.Trim(DtSet.Tables("a").Rows(i).Item(1))) Then 
      With DtSet.Tables("a").Rows(i) 
       Dim Juliya As String 
       Juliya = Microsoft.VisualBasic.Trim(.Item(0)) 
       fetch = "INSERT INTO MsData (Puno,Refno,MdName,MdCompany,MdAdd1,MdAdd2,MdAdd3,MdAdd4,MdCity,MdZip,MsDatein,MdPhone1,IdUser)" 
       fetch += " values ('" & .Item(1) & "','" & .Item(1) & "','" & Regex.Replace(.Item(7).ToString, "[',]", " ") & "','" & Regex.Replace(.Item(8).ToString, "[',]", " ") & "','" & Regex.Replace(.Item(9).ToString, "[',]", " ") & "','" & Regex.Replace(.Item(10).ToString, "[',]", " ") & "'" 
       fetch += ",'" & Regex.Replace(.Item(11).ToString, "[',]", " ") & "','" & Regex.Replace(.Item(12).ToString, "[',]", " ") & "','-','" & Regex.Replace(.Item(14).ToString, "[',]", " ") & "'" 
       fetch += ",getdate(),'" & Regex.Replace(.Item(13).ToString, "[',]", " ") & "','JOINNES')" 
      End With 
      Dim cmd As New SqlCommand(fetch, ConnImport) 
      cmd.ExecuteNonQuery() 
      fetch = "" 
     End If 

     If cek_ada_ga("PuNo", "MsDetail", Microsoft.VisualBasic.Trim(DtSet.Tables("a").Rows(i).Item(1))) Then 
      With DtSet.Tables("a").Rows(i) 
       Dim Juliya As String 
       Juliya = Microsoft.VisualBasic.Trim(.Item(0)) 
       sql += "INSERT INTO MsDetail (Puno,AWB,Periode,Code,BCode,PuDate,Noresi,FileName,Field1,Field2,MsChannel,Pudatein,IdUser)" 
       sql += " values ('" & .Item(1) & "','" & .Item(3) & "','" & Mid(.Item(4), 6, 2) & Mid(.Item(4), 3, 2) & "','" & .Item(0) & "','CGK'" 
       sql += ",'" & .Item(5) & "','-','" & txtPng.Text & "','" & .Item(6).ToString & "','" & .Item(2).ToString & "','FOXPRO','" & CDate(.Item(4)).ToString("MM/dd/yyyy") + " " + .Item(15).ToString & "','JOINNES')" 
      End With 
      Dim cmd As New SqlCommand(sql, ConnImport) 
      cmd.ExecuteNonQuery() 
      sql = "" 
     End If 

    Next 
    For i = 0 To DtSet.Tables("a").Rows.Count - 1 
     If cek_ada_ga("AWB", "Closed", Microsoft.VisualBasic.Trim(DtSet.Tables("a").Rows(i).Item(16))) Then 
      With DtSet.Tables("a").Rows(i) 
       Dim Juliya, STT As String 
       If .Item(1).ToString.Trim = "BERHASIL" Then 
        STT = "OK" 
       Else 
        STT = "RT" 
       End If 
       Juliya = Microsoft.VisualBasic.Trim(.Item(0)) 
       sql += "INSERT INTO Closed (AWB,ScStt,ScDate,ScPenerima,ScRel,ScDatein,ScNote,IdUser) " 
       sql += " values ('" & .Item(16) & "','" & STT & "','" & .Item(19) & "','" & Regex.Replace(.Item(18).ToString, "[',]", " ") & "','" & .Item(20).ToString & "'" 
       sql += ",getdate(),'-','JOINNES')" 
      End With 
      Dim cmd As New SqlCommand(sql, ConnImport) 
      cmd.ExecuteNonQuery() 
      sql = "" 
     End If 
    Next 
End Sub 

Я запутался, как решить это. Мне нужна помощь каждого из вас, ребята. Большое спасибо за вашу помощь :)

ответ

1

Данные, которые вы вставляете в таблицу SQL, имеют одни и те же данные в одном из полей. В вашей таблице SQL этот столбец является первичным ключом и не может иметь повторяющиеся данные.

Либо обновите данные, которые будут уникальными в базе данных Foxpro, либо если этот столбец не должен быть первичным ключом, тогда установите его не как первичный ключ в SQL.

+0

Спасибо за ваш ответ bro, я мало объясню вам. У меня есть две таблицы в sql db, это MsDetail и MsData. на MsData я устанавливаю, что PuNo является Первичным ключом, а на MsDetail я устанавливаю AWB как первичный, а PuNo на MsData i устанавливается как FK в таблице MsDetail. проблема в том, что когда я вставляю данные, она всегда показывает ошибку, как я объясняю выше. мой главный вопрос: как я могу вставить данные из моего foxpro в свой sql, хотя на нем есть одни и те же данные? можете ли вы дать мне более интересные запросы? Спасибо до брода :) – Joinnes

+0

Если поле, в которое он входит в SQL Server, является PK, иначе в нем есть уникальное ограничение, вы можете либо удалить дубликат в данных VFP, либо удалить ограничение в SQL Server. Кодирование не обойдется. –

Смежные вопросы