我正在尝试使用单个 SQL 命令执行两个选择,我想选择相关数据并将其插入另一个数据库中的另一个表中,但它不起作用,我对此很陌生,有人可以帮助我吗?提前致谢。
Try
If CreateAccessDatabase("C:\Users\Utilizador.Utilizador-PC\Documents\Visual Studio 2013\Projects\WindowsApplication1\WindowsApplication1\Doc_Vendas_Cab.mdb") = True Then
MsgBox("Database Created")
Else
MsgBox("Database Creation Failed")
End If
Dim Sql As String = "Select strCodSeccao,strAbrevTpDoc,strCodExercicio,intNumero " & _
"From Mov_Venda_Cab where dtmdata between @d1 and @d2; Union" & _
"Select Mov_Venda_Lin.Strcodartigo" & _
"from Mov_Venda_Lin,Mov_Venda_Cab where Mov_Venda_Cab.intnumero=Mov_Venda_Lin.intnumero;"
Dim data1, data2 As DateTime
data1 = DateTime.Parse(txtData1.Text)
data2 = DateTime.Parse(txtData2.Text)
data2 = data2.AddMinutes(0)
data2 = data2.AddHours(0)
data2 = data2.AddSeconds(0)
data1 = data1.AddMinutes(0)
data1 = data1.AddHours(0)
data1 = data1.AddSeconds(0)
Dim x As Integer = 0
Dim temp1, temp2, temp3, temp4, temp5 As String
Using con = New SqlConnection("Data Source=" & txtserv.Text & ";" & "Initial Catalog=" & txtBD.Text & ";" & "User ID=" & txtuser.Text & ";" & "Password=" & txtPass.Text & "")
Using cmd = New SqlCommand(Sql, con)
con.Open()
cmd.Parameters.AddWithValue("@d1", data1)
cmd.Parameters.AddWithValue("@d2", data2)
Using reader = cmd.ExecuteReader()
While reader.Read()
Dim strCodSeccao = reader("strCodSeccao").ToString()
temp1 = reader.Item(x)
temp2 = reader.Item(x + 1)
temp3 = reader.Item(x + 2)
temp4 = reader.Item(x + 3)
temp5 = reader.Item(x + 4)
Dim Con2 As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Utilizador.Utilizador-PC\Documents\Visual Studio 2013\Projects\WindowsApplication1\WindowsApplication1\Doc_Vendas_Cab.mdb;Persist Security Info=True")
Con2.Open()
Dim Ole2 As String = "Insert into Mov_Venda_Cab values('" & temp1 & "','" & temp2 & "','" & temp3 & "','" & temp4 & "','" & temp5 & "');"
Dim OledbCom2 As New OleDb.OleDbCommand(Ole2, Con2)
Try
OledbCom2.ExecuteNonQuery()
Catch Ex As Exception
MsgBox(Ex)
End Try
Con2.Close()
End While
End Using
End Using
End Using
Catch Ex As Exception
MsgBox(Ex)
End Try
最佳答案
您的 INSERT 语句将所有值括在单引号中。仅当相应的列都是文本列(varchar、nvarchar 等)时,这才有效。使用命令参数代替:
Dim Ole2 As String = "Insert into Mov_Venda_Cab values(@p1, @p2, @p3, @p4, @p5);"
Dim OledbCom2 As New OleDb.OleDbCommand(Ole2, Con2)
OledbCom2.Parameters.AddWithValue("@p1", temp1)
OledbCom2.Parameters.AddWithValue("@p2", temp2)
OledbCom2.Parameters.AddWithValue("@p3", temp3)
OledbCom2.Parameters.AddWithValue("@p4", temp4)
OledbCom2.Parameters.AddWithValue("@p5", temp5)
这适用于任何列类型。
<小时/>此外,您的 SELECT 语句仅列出四列,但您正在阅读器
中访问五列。
SELECT strCodSeccao, strAbrevTpDoc, strCodExercicio, intNumero FROM ...
<小时/>
代码中的其他内容也很奇怪。您正在定义两个以后永远不会使用的连接。
您正在向日期添加零小时、分钟和秒(这不会更改日期)。如果您想要日期的日期部分而不包含时间部分,请使用 Date
相反,它返回 DateTime
结构的日期部分:
data1 = DateTime.Parse(txtData1.Text).Date
您正在使用变量x
作为常量值。
您正在 While 循环中打开和关闭 Con2
。在循环之前打开它,在循环之后关闭它。 (对于其他连接,您可以使用 Using
语句来完成此操作。)
关于mysql - 使用日期和 union-vb 选择/插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125955/