Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用日期和union vb选择/插入_Mysql_Sql_Vb.net_Sql Server 2008_Union - Fatal编程技术网

Mysql 使用日期和union vb选择/插入

Mysql 使用日期和union vb选择/插入,mysql,sql,vb.net,sql-server-2008,union,Mysql,Sql,Vb.net,Sql Server 2008,Union,我正在尝试使用一个SQL命令进行两次选择我想选择相关数据并将其插入另一个数据库的另一个表中,但它不起作用,我是新手,有人能帮我吗?提前谢谢 Try If CreateAccessDatabase("C:\Users\Utilizador.Utilizador-PC\Documents\Visual Studio 2013\Projects\WindowsApplication1\WindowsApplication1\Doc_Vendas_Cab.mdb") = True Then

我正在尝试使用一个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 ...

代码中的其他内容也很奇怪。您正在定义两个以后不再使用的连接

您正在为日期添加零小时、分钟和秒(这不会更改日期)。如果希望日期的日期部分不包含时间部分,请改用属性,该属性返回
DateTime
结构的日期部分:

data1 = DateTime.Parse(txtData1.Text).Date
您正在使用变量
x
作为常量值


您正在While循环中打开和关闭
Con2
。循环前打开,循环后关闭。(对于另一个连接,您可以使用
语句进行

请解释什么不起作用。错误消息?帮助我们帮助您从不使用连接
SQLCon
Conn
。这不是问题的一部分,但您可以使用select查询代替VALUES子句进行插入,从而避免将其带到客户端。这将大大提高这里的性能。@JoelCoehoorn:他在两个不同的数据库之间传输数据。@OlivierJacot Descombes使用相同的连接字符串。但是,即使是针对不同的DB服务器,SQL Server也会自言自语:使用链接服务器并以这种方式发送信息将更加高效。