2016-03-31 12 views
1

私は検索テキストボックスIと、次にレコードを検索するために使用するボタンがあります。日付を検索できません(月ワード)

IDとステータスで検索できます。でも、テキストボックスを使って日付を検索したいのですが。

それは可能でしょうか?

ASPNET

<div class="pull-right col-lg-11"> 
    <center> 
     <asp:TextBox ID="txtSearch" runat="server" class="form-control" bordercolor="Black"></asp:TextBox> 
    </center> 
</div> 
<br /> 
<div> 
    <span class="input-group-btn"> 
     <asp:LinkButton ID="btnSearch" runat="server" class="btn btn" 
      BackColor="CornflowerBlue" Style="color: White" 
      OnClick="btnSearch_Click"> 
     <i class="fa fa-search"></i> 
     </asp:LinkButton> 
    </span> 
</div> 

ここでは、私は後ろの私のコードで試してみましたものです。

C#のコード:BUTTON FOR は単に "4月" のためではない検索は、事前に君たちに感謝することができ、この私を使用することにより

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     if (txtSearch.Text.Trim() == "") 
     { 
      GetPR(); 
     } 
     else 
     { 
      GetPRSearch(txtSearch.Text); 
     } 
    } 

MY GET

void GetPR() 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT Receiving.ReceivingID, Receiving.POID, Receiving.FinalDeliveryDate, " + 
      "Receiving.Status, Receiving.DateReceived, Receiving.ReceivedByID, Users.FirstName, Users.LastName, PO.CompanyName FROM Receiving " + 
      "INNER JOIN Users ON Receiving.ReceivedByID=Users.UserID INNER JOIN PO ON Receiving.POID=PO.POID ORDER BY Receiving.DateReceived DESC"; 
     cmd.Parameters.AddWithValue("@UserID", Session["userid"].ToString()); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "Receiving"); 
     lvPurchases.DataSource = ds; 
     lvPurchases.DataBind(); 
     con.Close(); 
    } 

void GetPRSearch(string keyword) 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = con; 
     cmd.CommandText = "SELECT Receiving.ReceivingID, Receiving.POID, Receiving.FinalDeliveryDate, " + 
      "Receiving.Status, Receiving.DateReceived, Receiving.ReceivedByID, Users.FirstName, Users.LastName, PO.CompanyName FROM Receiving " + 
      "INNER JOIN Users ON Receiving.ReceivedByID=Users.UserID INNER JOIN PO ON Receiving.POID=PO.POID " + 
      "WHERE Receiving.ReceivingID LIKE '%" + keyword + "%' OR PO.CompanyName LIKE '%" + keyword + "%' OR Receiving.POID LIKE '%" + keyword + "%' " + 
      "OR Receiving.DateReceived LIKE '%" + keyword + "%'"; 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "Receiving"); 
     lvPurchases.DataSource = ds; 
     lvPurchases.DataBind(); 
     con.Close(); 
    } 

をクリック!アドバイスは非常に高く評価されています。

+0

JSONの答えは移動するための方法ですが、それは 'GetPRSearch'内のSQLインジェクション攻撃への広い開いているという点で、あなたはここにあなたのコード内の問題を持っています。入力をパラメータ化する必要があります。さらにクエリをストアドプロシージャに移動すると、将来の変更やメンテナンスがずっと簡単になるという利点があります。 –

+0

あなたは私たちにあなたが使用しているデータベースエンジンを与えるためにとても親切でしょうか?私は、エンジンの組み込み関数を使って検索する簡単な方法はどこにあるのでしょうか。 – thepanch

+0

私はSQL SERVER @thepanch –

答えて

0

SQL Serverを使用している場合は、単純にこれを行うことができます。

"Select * from yourtable WHERE Datename(month,YOURDATEColumn) like '%'+ keyword + '%'" 

このように、組み込み関数は現在の言語で月名を取得します。

ここでは、詳細な情報を見つけることができます。このhttps://msdn.microsoft.com/es-es/library/ms174395%28v=sql.120%29.aspx

+0

日付が4月のレコードは表示されません: –

+0

この単純な選択を使用して、 'SELECT Receiving.ReceivingID、Receiving.POID、Receiving.FinalDeliveryDate、" + "Receiving.Status、あなたが得ている月の名前を参照してください。 – thepanch

+0

いいえ。間違ったテーブル名を呼んでいます。ありがとうございました!私はこれを使用しました。私はこれを使いました。あなたが ''%t '+キーワード+'% 'のようなデータ名(月、YOURDATEC列)を選択してください。 " –

0

データベース内の値が日時として格納されている場合、SQLは自動的に文字列をdatetimeに変換します。だから、何ができる:

SELECT * FROM tablename 
WHERE tablename.date = '04/01/2016' 

あなたが範囲を選択する必要があります全体の月の値を選択したい場合は、次の自分の価値観を文字列として保存されている場合は、あなたがする必要があります

SELECT * FROM tablename 
WHERE tablename.date >= '04/01/2016' 
AND tablename.date <= '04/30/2016' 

を範囲が機能するように値をdatetimeに変換します。このようにそれを行う:

SELECT * FROM tablename 
WHERE convert(datetime, tablename.date, 101) >= '04/01/2016' 
AND convert(datetime, tablename.date, 101) <= '04/30/2016' 

あなたがせている場合は、ユーザーが唯一の月全体だけでなく、一日を選択し、私は、テキストボックスの代わりにドロップダウンリストを使用します。

+0

これを試してみましょう。ご検討いただきありがとうございます。私はあなたに結果が何であるかを知らせます! –

+0

たぶん私はドロップダウンリストを試してみるべきです –

+0

@ pauline-gail-mallari-chan:ドロップダウンリストを使うと、ユーザは設定した値だけを使用することを制限します。そうすれば、入力値の検証やこの値に対するSQLインジェクションの心配はありません。 – JSON

関連する問題