1

WONumをSQL文字列に挿入するのに苦労しています。WONumの周りに'とdouble''を使ってみました。誰かがその周りに#と[]も提案しましたが、これまでのところ何も機能していません。

次のエラーが発生し続けます:「1577」付近の構文が正しくありません

実行時のWONum値は実際にはWO-1577ですが、DA.fillを実行すると、そのエラーが発生します。私はダッシュが私が気付いていないSQLで何かをしていると思い始めています。私のアプリケーションではさらにいくつかの同様の機能を実行する必要があるため、どんな助けでも役に立ちます。

Public Function GetTechTimes(ByVal WONum As String)

    Dim strSQL As String = "Select customer_name, workorder_work_to_be_performed, workorder_work_performed, workorder_notes, workorder_warranty_work, workorder_open_date, workorder_status,workorder_completion_date, wo_tech_name, wo_tech_time, wo_parts_description from Customers, workorders, WorkOrder_Technicians, WorkOrder_Parts Where(customer_id = workorder_customer And wo_tech_wo_id = workorder_id And wo_parts_wo_id = workorder_id And workorder_number = " & WONum & ""
    Dim DA As New SqlDataAdapter(strSQL, Conn)
    Dim DS As New DataSet
    DA.Fill(DS, "TechTimes")
    Return DS
End Function
4

2 に答える 2

5

使用してくださいSql-Parameters!これにより、変換やその他の問題が回避され、さらに重要なことに、 SQLインジェクション攻撃が防止されます。

Public Function GetTechTimes(ByVal WONum As String) As DataSet
    Dim strSQL As String = "SELECT customer_name, " & Environment.NewLine & _
    "workorder_work_to_be_performed," & Environment.NewLine & _
    "workorder_work_performed, " & Environment.NewLine & _
    "workorder_notes, " & Environment.NewLine & _
    "workorder_warranty_work, " & Environment.NewLine & _
    "workorder_open_date, " & Environment.NewLine & _
    "workorder_status, " & Environment.NewLine & _
    "workorder_completion_date," & Environment.NewLine & _
    "wo_tech_name, " & Environment.NewLine & _
    "wo_tech_time, " & Environment.NewLine & _
    "wo_parts_description" & Environment.NewLine & _
    "FROM(customers," & Environment.NewLine & _
    "       workorders," & Environment.NewLine & _
    "       workorder_technicians," & Environment.NewLine & _
    "       workorder_parts)" & Environment.NewLine & _
    "WHERE customer_id = workorder_customer " & Environment.NewLine & _
    "AND wo_tech_wo_id = workorder_id " & Environment.NewLine & _
    "AND wo_parts_wo_id = workorder_id " & Environment.NewLine & _
    "AND workorder_number = @workorder_number "

    Using con = New SqlConnection(YourConnectionString)
        Using da = New SqlDataAdapter(strSQL, con)
            da.SelectCommand.Parameters.AddWithValue("@workorder_number", WONum)
            Dim DS As New DataSet
            da.Fill(DS)
            Return DS
        End Using
    End Using
End Function

Using例外が発生した場合でもすべてが破棄されるように、-statementsも使用していることに注意してください。

さて、あなたの例外の理由:あなたはここにオープニングブレースを持っていました:Where(customer_idそれは決して閉じられませんでした。

于 2013-01-16T14:40:22.193 に答える
0

文字列である限り、workorder_number必要なのはWONumの前後に一重引用符を付けることだけです。

#や角かっこは必要ありません。

一重引用符で機能しない場合は、問題を正しく特定/特定したことを確認してください。And workorder_number = " & WONum & ""SQLの最後からを削除し、それがなくても機能するかどうかを確認します。そうでない場合、問題はWONumになく、文字列の早い段階にあります。

于 2013-01-16T14:37:46.553 に答える