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






1.75/5 (5投票s)
2004年9月18日
2分钟阅读

50923

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 非常易于使用,并大大减少了代码量。这是我在这里的第一篇文章,因此任何关于内容、格式的建议都将不胜感激。