Thanks Dana,
I think you're talking about doing what I did, but I'm not 100% sure.
Below is my solution. Could you let me know if yours is the same or
something more elegant?
If it's the same, maybe this code will be helpful for other people. How'd I
do? (I'm not a pro, so go easy):
Public Sub InsertSongVers(ByVal tableWanted As String)
'SQL Server
Dim myTable As String = tableWanted
dim sConnString As String = "..." 'insert your
connection to SQL string here
dim myconnection As New SqlConnection(sConnString)
myconnection.Open()
Dim SCMSdataadapter As New SqlDataAdapter("Select * from " &
myTable, myconnection)
Dim dtSCMS As New DataTable(myTable)
SCMSdataadapter.Fill(dtSCMS)
myconnection.Close()
'create an array with the column data types
Dim mySQLFields As String = "("
Dim columnNames = New List(Of String)
Dim columnTypes = New List(Of String)
For Each column As DataColumn In dtSCMS.Columns
Dim newItem As String = column.ColumnName
columnNames.Add(newItem)
Dim newTypeItem As String
newTypeItem = column.DataType.ToString
columnTypes.Add(newTypeItem)
If mySQLFields = "(" Then
mySQLFields = mySQLFields & "[" & newItem & "]"
Else
mySQLFields = mySQLFields & ",[" & newItem & "]"
End If
Next
mySQLFields = mySQLFields & ")"
Debug.Writeline("Here's the list of data types: " & mySQLFields)
'create a string with the data
Dim myRowNum As Integer = 0
For Each row As DataRow In dtSCMS.Rows
Dim mySQLRowData As String = "("
Dim columnIndex As Integer = -1 ' because first index is 0
For Each cell In row.ItemArray
columnIndex = columnIndex + 1
Dim myAddSt As String = cell.ToString
Dim myType As String = ""
Select Case columnTypes.Item(columnIndex)
Case "System.String" 'nvarchar(50)
myAddSt = "'" & Replace(myAddSt, "'", "''") & "'"
Case "System.Int32" 'bigint
If cell.GetType.ToString = "System.DBNull" Then
myAddSt = "'null'"
Case "System.DBNull" 'null -don't think this can
happen now
Case "System.DateTime" 'datetime
myAddSt = "'" & myAddSt & "'"
Case "System.Boolean" 'bit
Select Case myAddSt
Case "False"
myAddSt = "0"
Case "True"
myAddSt = "1"
Case IsNothing(myAddSt) 'don't know if this
one's possible, but what the hey
myAddSt = "0"
Case ""
myAddSt = "0"
End Select
Case "System.Byte[]"
Dim rowNumber As Int64 = BitConverter.ToInt64(cell,
0)
myAddSt = rowNumber.ToString() '"'" & myAddSt & "'"
Case Else
MsgBox("Didn't expect to see " &
cell.GetType.ToString & " for type. Check it out.")
End Select
If mySQLRowData = "(" Then
mySQLRowData = mySQLRowData & myAddSt
Else
mySQLRowData = mySQLRowData & "," & myAddSt
End If
Next
mySQLRowData = mySQLRowData & ");"
Debug.WriteLine("Here's the data: " & mySQLRowData)
Dim mySQLUp As String = ("INSERT INTO [" & myTable & "] " &
mySQLFields & " VALUES " & mySQLRowData)
Debug.WriteLine("Here's the full SQLite syntax: " & mySQLUp)
Try
'SQLite
Dim connectionString As String = "Data Source=...path to
your Database"
Dim dbConnection As New SQLiteConnection(connectionString)
dbConnection.Open()
Dim command = New SQLiteCommand(mySQLUp, dbConnection)
command.ExecuteNonQuery()
dbConnection.Close()
Catch ex As Exception
If ex.Message = "constraint failed" & vbCrLf & "UNIQUE
constraint failed: SongVersionsTEST.SongVerID" Then
Debug.WriteLine("That record is already in the table.")
'I think this line came from the "INSERT" version of this code I wrote and
probably don't need it here, sorry.
End If
End Try
myRowNum = myRowNum + 1
Debug.WriteLine(myRowNum)
Next 'next row
MsgBox("All done! " & myRowNum & " records")
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of dmp
Sent: Wednesday, July 20, 2016 10:00 AM
To: [email protected]
Subject: Re: [sqlite] SQL to SQLite
> Message: 2
> Date: Tue, 19 Jul 2016 15:01:55 -0700
> From: <[email protected]>
> To: <[email protected]>
> Subject: [sqlite] SQL to SQLite
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="us-ascii"
>
> What's the best way to Insert or Update records from a connected SQL
> database to the connected SQLite database?
>
> I don't mean just once, but to do every so often.
> Thanks.
> Thanks for your response.
> Programming language is definitely the way I want to go, and in fact I
> programmed a workaround, but I assume I took the long way around and
> that there's a more standard way to do it.
Hello,
If the source database is different, or SQLite, than the destination
database, SQLite, can be done and I have been working on a bridge in Java
that will perform the transfer. It is functional, but needs further work and
testing.
Essentially:
Create an ArrayBlockingQueue, start a LoadThread and a InsertPrepareThread.
Define the ArrayBlockingQueue as objects of a relation row element. Have the
load thread fill the blocking queue then the insert prepare thread consume
the table row elements from the queue.
A single SQL query can be used to define the SQLite table then fill it with
the source database data. A type definitions conversion needs to take place
to correctly transfer db --> db data types.
I have defined these type info conversions for various database and it is
available as part of my MyJSQLView project. At this time the db --> db code
is a plugin for MyJSQLView and is not been released to the public.
https://github.com/danap/myjsqlview/blob/master/src/com/dandymadeproductions
/myjsqlview/datasource/TypesInfoCache.java
Dana Proctor
MyJSQLView Project Manager
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users