我有一个用户表单,允许用户选择开始和结束日期(分别使用名为dtStart
和dtEnd
的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.Text
和dtEnd.Text
的引用,这些显然只是作为文本处理,因此运行SQL失败。
是否有任何方法可以将值传递到资源文件中,或告诉vb.net我的提取文件中的dtStart.Text
不是文本,而是对DateTimePicker值的引用。
提前感谢您的建议。
答案 0 :(得分:1)
因此,对于任何对“Pro Grammer”的评论感兴趣的人,我有2个解决方案:
1)查找并替换相关字符串:
/(?:^|,)\w{2}(?!3G|3K)/i
2)使用参数化SQL:
资源文件中的我的SQL已经改为看起来像这样
mySQLString = My.Resources.Extract.Replace("dtStart.Text", dtStart.Text).Replace("dtEnd.Text", dtEnd.Text)
然后在代码中设置Select *
From
some.table
Where a.start_dttm > (@startdate - INTERVAL 1 DAY) and a.end_dttm <= @enddate
和@startdate
参数,如下所示:
@enddate