参数化查询未生成正确的FillMethod

时间:2015-09-15 01:30:39

标签: sql vb.net oledb

我有一个表,我使用TableAdapter查询配置向导(VS2010)创建自定义查询。查询是:

SELECT AssociateName, TimeField, InOut, Reason, [Key] FROM PunchEventTable
WHERE  (TimeField =
                   (SELECT  MAX(TimeField) AS Expr1
                    FROM     PunchEventTable PunchEventTable_1
                    WHERE  (AssociateName LIKE ?))) AND (AssociateName LIKE ?)

它生成的代码是:

<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
 Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0"),  _
 Global.System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter"),  _
 Global.System.ComponentModel.DataObjectMethodAttribute(Global.System.ComponentModel.DataObjectMethodType.Fill, false)>  _
Public Overloads Overridable Function FillByLast(ByVal dataTable As TTDataSet.PunchEventTableDataTable, ByVal AssociateName As String) As Integer
    Me.Adapter.SelectCommand = Me.CommandCollection(2)
    If (AssociateName Is Nothing) Then
        Me.Adapter.SelectCommand.Parameters(0).Value = Global.System.DBNull.Value
    Else
        Me.Adapter.SelectCommand.Parameters(0).Value = CType(AssociateName,String)
    End If
    If (Me.ClearBeforeFill = true) Then
        dataTable.Clear
    End If
    Dim returnValue As Integer = Me.Adapter.Fill(dataTable)
    Return returnValue
End Function

但是我发现这不起作用,因为每个&#39;?&#39;在查询中被视为一个单独的参数,所以我真正需要的是额外的行:

Me.Adapter.SelectCommand.Parameters.Add(New System.Data.OleDb.OleDbParameter)
Me.Adapter.SelectCommand.Parameters(1).Value = CType(AssociateName, String)

设置第二个&#39;?&#39;到AssociateName也是如此。如Designer.vb文件顶部所示,此文件是自动生成的,因此我的更改并不总是持久存在(因此手动执行此操作听起来像一个可怕的想法)。任何人都可以建议如何正确生成此代码吗?

谢谢,

大卫

1 个答案:

答案 0 :(得分:0)

我删除了designer.vb文件,然后正确重新生成。我不知道你应该如何触发再生,但似乎这不应该持续几乎与它一样长(在几次构建之后等),但这次生成了正确的代码。