65.9K
CodeProject 正在变化。 阅读更多。
Home

使用数据访问应用程序块 3.0 将字符串转换为 DateTime 以在 ADO.NET 参数化查询中使用

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.75/5 (5投票s)

2004年9月18日

2分钟阅读

viewsIcon

50923

downloadIcon

828

本文向您展示了如何获取日期字符串并在参数化的 SQL Server 查询中使用它。

引言

最近,我需要将开始日期和结束日期传递给 SQL Server 并返回结果。开始日期和结束日期将作为用户输入,并将在客户端验证为格式为 mm/dd/yyyy 的格式化字符串。将这些字符串直接传递给 SQL Server 作为字符串查询的一部分会很简单。我可以直接使用

sql = "SELECT * FROM Orders WHERE OrderDate BETWEEN '" + startdate + " ' AND '" + enddate + "'"; 


但是,由于代码来自用户,我不想这样做,因为存在 SQL 注入攻击等问题。因此,我需要为我的查询创建参数。在这种特定情况下,我不能使用存储过程,所以我使用了参数化查询。

以下是我用来完成此操作的代码。它还包括如何使用版本 3.0 的数据访问应用程序块的示例,该块允许完全的数据库独立性(与版本 2.0 不同)。如果您还没有查看该项目,它非常有用。您可以在以下网址找到它:

http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c20d12b0-af52-402b-9b7c-aaeb21d1f431

当我尝试弄清楚如何使用数据访问应用程序块进行参数化查询时,我挣扎了一段时间,希望这段代码也能作为该示例。为此,您首先必须在开始日期上添加 12:00AM,在结束日期上添加 11:59PM。这确保了您获得整天的数据。如果您使用的是存储过程,可以在存储过程中执行此操作。

所以这是代码

using System;
using GotDotNet.ApplicationBlocks.Data;
using System.Data; 
public class Converter {
 public static void Main( string[] args ) {
  if( args.Length != 2 ) {
   Console.WriteLine( "Please supply a start and end date" );
   return;
  }
  IDataReader rdr = GetTheDates( args[0], args[1] );
   
  while( rdr.Read() ) {
   Console.WriteLine( "OrderId: {0} - CustomerId: {1}", rdr[ "OrderId" ], rdr[ "CustomerId" ] );
  }
 } 
 public static IDataReader GetTheDates( string startdate, string enddate ) {
  string dbcon = "Data Source=localhost; Integrated Security=SSPI;Initial Catalog=northwind";
  SqlServer s = new SqlServer();
  startdate += " 12:00AM";
  enddate += " 11:59PM";
  IDataParameter[] p = new IDataParameter[2];
  p[0] = s.GetParameter( "@StartDate", DateTime.Parse( startdate ));
  p[1] = s.GetParameter( "@EndDate", DateTime.Parse( enddate ));
  string sql = "Select * From Orders WHERE OrderDate BETWEEN @StartDate AND @EndDate";
  return s.ExecuteReader( dbcon, CommandType.Text, sql, p );
 }
}
// COMPILE USING: csc string_datetime_convert.cs /r:GotDotNet.ApplicationBlocks.Data.dll

我希望这篇文章对您有所帮助。它面向刚开始学习如何连接到数据库的 C# 初学者。再次,我强烈建议使用数据访问应用程序块而不是直接使用 ADO.NET 函数。DAAB 非常易于使用,并大大减少了代码量。这是我在这里的第一篇文章,因此任何关于内容、格式的建议都将不胜感激。

© . All rights reserved.