将值传递给 vb.net 中的资源文件
passing values to a resource file in vb.net
我有一个用户表单,允许用户 select 开始和结束日期(分别使用名为 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 值的引用。
提前感谢您的建议。
因此,对于任何根据 "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
...
我有一个用户表单,允许用户 select 开始和结束日期(分别使用名为 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 值的引用。
提前感谢您的建议。
因此,对于任何根据 "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
...