在 SQL 数据库中搜索特定日期时间 (WebMatrix)

Searching for a specific DateTime in a SQL Database(WebMatrix)

我正在尝试在 SQL 数据库中搜索一组特定的 DateTime 项目。我的意图是能够搜索特定日期,然后将该数据的日志数据显示在 WebGrid 的屏幕上。

我很感激能得到任何提示和帮助,因为我对编程还很陌生

我的初始错误:

System.Data.SqlServerCe.SqlCeException: The data type is not valid for the boolean operation. [ Data type (if known) = datetime,Data type (if known) = nvarchar

完整的代码集如下:

 @{
var db = Database.Open("Cafeen");

var grid = new WebGrid();
if (IsPost) {
    var SearchTerm = Request["Data"];
    var selectcommand = "SELECT * FROM logistics WHERE Date > SearchTerm";
    var dw = Convert.ToDateTime(SearchTerm);
    var SelectedData = db.Query(selectcommand, dw);
    grid = new WebGrid(source: SelectedData, defaultSort: "Stock", rowsPerPage:50);
}
}
</form>
<h1>Search for Log files</h1>
<form method="post">
    <div id="grid">
            Date: <input type="text" id="datepicker" size="30" value="@Request["Data"]" />
            <input type="submit" />
            <hr/>
            @if (IsPost) {
                    @grid.GetHtml(
                        tableStyle: "grid",
                        headerStyle: "head",
                        alternatingRowStyle: "alt",
                        columns: grid.Columns(
                            grid.Column("ProductName"),
                            grid.Column("Category"),
                            grid.Column("Price"),
                            grid.Column("PurchasePrice"),
                            grid.Column("Stock"),
                            grid.Column("Date")
        )
    )
            }
    </div>
</form>

<title>jQuery UI Datepicker - Format date</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(function() {
$( "#datepicker" ).datepicker();
$( "#format" ).change(function() {
  $( "#datepicker" ).datepicker( "option", "dateFormat", $( this ).val() );
 });
});
</script>

你走在正确的轨道上。但是将参数传递到 SQL 字符串的方式是通过称为参数化的方式。 SQL 字符串中的第一个参数将是@0,第二个是@1,依此类推。这些将对应于 db.Query() 中传递的第一个参数。所以你可以把它想象成 db.Query(string, @0, @1,....)。因此,对于您的具体情况,我会稍微更改 sql 以仅查看日期,然后使用参数:

var selectcommand = "SELECT * FROM logistics WHERE Date > @0";

然后您的查询行将如下所示:

var SelectedData = db.Query(selectcommand, dw);

并且您的 dw 变量被放入字符串的 @0 部分。顺便说一句,参数化可以保护您免受称为 SQL 注入攻击的严重安全漏洞。