【问题标题】:Searching for a specific DateTime in a SQL Database(WebMatrix)在 SQL 数据库中搜索特定的日期时间(WebMatrix)
【发布时间】:2016-05-02 12:39:24
【问题描述】:

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

由于我是编程新手,因此我将不胜感激任何提示和帮助

我的初始错误:

System.Data.SqlServerCe.SqlCeException:数据类型对布尔运算无效。 [ 数据类型(如果知道)= datetime,数据类型(如果知道)= 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>

【问题讨论】:

    标签: c# sql datetime search webmatrix


    【解决方案1】:

    你在正确的轨道上。但是将参数传递到 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 注入攻击的令人讨厌的安全漏洞。

    【讨论】:

    • 即使有您的建议,我也无法让它运行,我收到以下错误 System.Data.SqlServerCe.SqlCeException:指定的数据类型无效。 [数据类型(如果已知)= 日期]
    • 作为测试,将您的行更改为 var selectcommand = "SELECT * FROM Logistics WHERE CONVERT(date, getdate()) = '5/6/2016'";其中日期是您数据库中实际存在的日期,看看会发生什么。
    • 很遗憾报错信息还是一样,
    • 这听起来像是日期字段并不是真正的日期时间。我还注意到我的建议中的情况没有正确。我不确定这是否重要(我认为 SQL 不区分大小写)。
    • 再次检查日期类型。改变大小写是正确的。如果一切看起来都不错,那么从 SQL 中删除 WHERE 子句,这样我们就可以工作了:) 意思是将 selectcommand 更改为“SELECT * FROM Logistics”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多