2016-05-02 14 views
1

特定のDateTimeアイテムのセットをSQLデータベースで検索しようとしています。私の意図は、特定の日付を検索し、そのデータのログデータをWebGridの画面に表示することです。SQLデータベース(WebMatrix)で特定のDateTimeを検索する

私はプログラミングにかなり新しいですので、私は私の最初のエラー

私は得ることができます任意のヒントやヘルプをいただければ幸いです。

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> 
+0

列のデータ型? – jarlh

+0

DateTime形式 –

答えて

0

あなたは正しい道を歩いています。しかし、SQL文字列にパラメータを渡す方法は、パラメータ化と呼ばれるものを通して行われます。 SQL文字列の最初のパラメータは@ 0、2番目の@ 1などとなります。これらは、db.Query()で渡された最初のパラメータに対応します。したがって、db.Query(文字列、@ 0、@ 1、....)と考えることができます。あなたの特定のケースにだから、私は少しばかりの日付を見て、そのパラメータを使用するようにSQL変更します

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

をして、クエリの行は次のようになります。

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

とあなたdw変数は、文字列の@ 0部分に配置されます。ところで、パラメータ化はSQLインジェクション攻撃と呼ばれる厄介なセキュリティ脆弱性からあなたを守ります。

+0

あなたのアドバイスでも、実行するためにそれを得ることができません。次のエラーが表示されます。System.Data.SqlServerCe.SqlCeException:指定されたデータ型が無効です。 [データタイプ(該当する場合)=日付] –

+0

テストとして、行を に変更してください。var selectcommand = "SELECT * FROM logistics where CONVERT(date、getdate())= '5/6/2016'"; ここで、日付は実際にデータベースにあるもので、何が起こるかを確認します。 – Knox

+0

残念ながら、エラーのエラーメッセージは同じです。 –

関連する問題