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

标签 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
        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/

相关文章:

mysql - 数据 GridView 显示列但不显示数据

vb.net - 确定哪一行导致vb.net程序崩溃

mysql - MongoDB 复杂的按功能选择计数组

php - 在 where 中连接两列

mysql - Redshift 中的 REGEXP_REPLACE

c# - 使用 SQL 在 C# 中使用 Combobox

sql - 我如何先由 parent 订购,然后由 child 订购?

mysql - 使用 eloquent 根据结果查找结果

java - INSERT sql 语句结合 SELECT 和 WHERE

.net - 获取枚举值的名称