2016-06-15 39 views
-1

我有问题,当我尝试选择加入与附加数据库命令从不同的SQLite数据库表和把值到datagridview的附加2 SQLite数据库,然后选择表

他们得到许多错误如:数据库无法打开,ExuteNonQuery错误,无法打开连接,无法打开数据库。

pathinfo2作为我的主数据库和pathinfo1我的DB2

这是我的代码:

Sub slc_smscontact() 
    Dim fc1 As String = "Data Source=" + pathinfo2.Text + ";Version=3;" 
    Dim SQL As String = "ATTACH '" + pathinfo1.Text + "' AS db2" 
    Dim com As New SQLiteCommand(SQL) 
    Dim connection As SQLiteConnection = New SQLiteConnection(fc1) 
    'connection.ConnectionString = fc1 
    com.Connection = connection 
    connection.Open() 
    Dim retval As Integer = 0 
    Try 
     retval = com.ExecuteNonQuery() 
    Catch ex As Exception 
     MessageBox.Show("An error occurred, your attach databases was not completed.") 
    Finally 
     com.Dispose() 
    End Try 

    SQL = "select distinct a.data1 no_telp, b.data1 nama, db2.sms.address, db2.sms.body, db2.sms.date, db2.sms.date_sent, db2.sms.Thread_id from (select raw_contact_id,data1 from data where mimetype_id = 5) as a, (select raw_contact_id,data1 from data where mimetype_id = 7) as b where a.raw_contact_id = b.raw_contact_id INNER JOIN db2.sms ON data.no_telp = db2.sms.address;" 
    com = New SQLiteCommand(SQL) 
    com.Connection = connection 
    'retval = 0 
    Try 
     Dim ds3 As New DataSet() 
     Dim da3 As New SQLiteDataAdapter(com) 
     da3.Fill(ds3) 
     grid3.DataSource = ds3.Tables(0).DefaultView 
     'retval = com.ExecuteNonQuery() 
    Catch ex As Exception 
     MessageBox.Show("An error occurred, your select was not completed.") 
    Finally 
     'com.Dispose() 
     connection.Close() 
    End Try 
End Sub 

有任何人知道如何解决它?

+0

如果回答了这个问题,请点击对号,以便将此帖子移出未回复列表。 – Plutonix

回答

1

这正常打开,连接和查询二次DB:

Dim SQL = "SELECT Id, Name, Fish, Bird FROM db2.Example" 
' "attachment" string 
Dim sqlAtt = String.Format("ATTACH '{0}' AS {1} ", sqlFile, "db2") 

' connect to "main" db 
Using dbcon As New SQLiteConnection(LiteConnStr) 

    ' create a command just for the attaching 
    Using cmdAtt As New SQLiteCommand(sqlAtt, dbcon) 

     dbcon.Open() 
     ' execute attachment 
     cmdAtt.ExecuteNonQuery() 

     ' now run a query on db2 from connection to db1 
     Using cmd As New SQLiteCommand(SQL, dbcon) 

      dtSample = New DataTable 
      dtSample.Load(cmd.ExecuteReader) 
      dgv2.DataSource = dtSample 
     End Using 
    End Using 
End Using 

一个你想要做的是正确地引用数据库文件附加的东西(和主数据库文件这件事),和一个文本框(即用户输入)是一个不好的开始。类似这样的:

sqlFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 
             "SQLite dbs", "secondary.db") 
Dim sqlAtt = String.Format("ATTACH '{0}' AS {1} ", sqlFile, "db2") 

将文件名放入刻度中有助于防止文件名在路径中包含空格时被错误地读取。

如果/当您关闭(或丢弃)连接时,附件将丢失,因此您可能需要创建一个方法来打开并附加其他数据库,并返回一个DBConnection对象。

+0

'path.combine(...)'msg =“路径结合不是一串字符串”在尝试附加db2时无法排除。错误消息=“C:\我的路径数据库无法打开数据库”。 @Plutonix还有另一个解决方案吗?之前感谢,我新使用vb; – jojodog

+0

'Path'是'System.IO'的成员。将'Imports System.IO'添加到文件的顶部。但是''不是字符串'的一部分'听起来像你实现它不正确 – Plutonix