将值传递给 vb.net 中的资源文件

passing values to a resource file in vb.net

我有一个用户表单,允许用户 select 开始和结束日期(分别使用名为 dtStartdtEnd 的 DateTimePicker 对象)。然后将这些日期用作针对数据库的 sql 查询的条件。

当我最初编写程序时,我在我的应用程序中硬编码了 SQL 查询,它运行良好。下面的简化示例:

Private Sub RunSQL_Click(sender As Object, e As EventArgs) Handles RunSQL.Click

    Dim mySQLString As String

    'Create SQL Query String
    mySQLString = "Select * " & vbLf &
                  " From " & vbLf &
                  "  some.table " & vbLf &
                  " Where a.start_dttm > (' & dtStart.Text & ' - INTERVAL '1' DAY) and a.end_dttm <= ' & dtEnd.Text & '"

   'Run SQL against database
   ...

End Sub

但是,考虑到真正的 SQL 语句非常复杂,我想改为调用 My.Resources 中包含 SQL 语句的文件,因此它是如果以及何时我想对摘录进行更改,则更容易更新。因此,在上面的示例中,我会将 SQL 语句的写法更改为 mySQLString = My.Resources.Extract。我的问题是如何传递 My.Resources.Extract 用户输入的开始和结束日期。

如果我的资源文件包含对 dtStart.TextdtEnd.Text 的引用,这些显然只是作为文本处理,因此 运行 SQL 失败。

有什么方法可以将值传递到资源文件中,或者告诉 vb.net 我的提取文件中的 dtStart.Text 不是文本,而是对 DateTimePicker 值的引用。

提前感谢您的建议。

因此,对于任何根据 "Pro Grammer" 的评论感兴趣的人,我有 2 个解决方案:

1) 查找并替换相关字符串:

mySQLString = My.Resources.Extract.Replace("dtStart.Text", dtStart.Text).Replace("dtEnd.Text", dtEnd.Text)

2) 使用参数化SQL:

我的 SQL 资源文件中的内容已更改为如下所示

Select *
From
 some.table
Where a.start_dttm > (@startdate - INTERVAL 1 DAY) and a.end_dttm <= @enddate

然后在代码中设置@startdate@enddate参数如下:

Dim mySQLCommnad as IngresCommand 
'NB I am using Ingres, but this will need to relate to whichever database flavor you are using.

mySQLCommand = myVector.myIngresConnection.CreateCommand()
mySQLCommand.CommandText = My.Resources.Extract
mySQLCommand.Parameters.Add("@startdate", SqlDbType.Date).Value = dtStart.Text
mySQLCommand.Parameters.Add("@enddate", SqlDbType.Date).Value = dtEnd.Text

'RunSQL
...