iam*_*esy 1 vb.net date-format sql-server-2008
我在DB表格中有一个日期列,我想使用从textbox.text获取的日期进行查询.用户以dd/MM/yyyy格式从日历中选择日期.我想使用该日期进入查询.如何格式化日期以便能够查询数据库?
Dim datefrom As String =txtDateFrom.Text
Dim dateto As String =txtDateTo.Text
Run Code Online (Sandbox Code Playgroud)
查询将如下所示:
WHERE (tblClient.ClientID = " & ClientID & ") AND (tblBackupArchive.BackupDate BETWEEN '" + datefrom + "' AND '" + dateto + "')"
Run Code Online (Sandbox Code Playgroud)
我正在使用MS SQL Server btw.任何帮助最受赞赏.
Jonesy
永远不要使用串联连接来建立您的查询!
是的,我的意思是大喊大叫,因为日期格式化是你问题中最少的.想象一下,如果在您的日期文本框中输入以下内容,您当前的代码会发生什么:
'; DROP TABLE tblClient; -
而是使用参数化查询.这将修复您的日期问题并防止SQL注入攻击.这是一个例子:
Dim sql As String = " .... WHERE tblClient.ClientID= @ClientID AND tblBackupArchive.BackupDate >= @DateFrom AND tblBackupArchive.Backupdate < @DateTo"
Using cn As New SqlConnection("your connection string here"), _
cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@ClientID", SqlDbType.Int).Value = ClientID
cmd.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = DateTime.Parse(txtDateFrom.Text)
cmd.Parameters.Add("@DateTo", SqlDbType.DateTime).Value = DateTime.Parse(txtDateTo.Text).AddDays(1)
cn.Open()
cmd.Execute___()
End Using
Run Code Online (Sandbox Code Playgroud)
你现在可以把它想象成你运行一个更像这样的sql语句:
DECLARE @ClientID Int
DECLARE @DateFrom DateTime
DECLARE @DateTo DateTime
Set @ClientID = ImaginaryFunctionToGetQueryData('ClientID')
Set @DateFrom = ImaginaryFunctionToGetQueryData('DateFrom')
Set @DateTo = ImaginaryFunctionToGetQueryData('DateTo')
SELECT ...
FROM ...
WHERE tblClient.ClientID= @ClientID
AND tblBackupArchive.BackupDate >= @DateFrom
AND tblBackupArchive.Backupdate < @DateTo
Run Code Online (Sandbox Code Playgroud)
该代码中的"ImaginaryFunction"是使用sp_executesql存储过程完成的,但重点是sql server看到的查询字符串永远不会直接将数据替换为查询字符串.代码是代码,数据是数据,而不是'twain应该满足.
| 归档时间: |
|
| 查看次数: |
4724 次 |
| 最近记录: |