0

aspxファイルに日付値を持つ2つのテキストボックスがあります。コードビハインドを使用してselectステートメントでこれらの2つのコントロールにアクセスしたいのですが、次のようなエラーが発生します。ありがとう

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MainGridView.DataSource = GetData("select   GroupCategory, Count(Status1) as TotalCount from  [MasterProject] where Closing_Date >= @txtStartClosingDate and Closing_Date <= @txtEndClosingDate and Status1 is not null group by  GroupCategory");
            MainGridView.DataBind();


        }
    }

これが私が参照しようとしているテキストボックスの1つです:

<asp:TextBox ID="txtStartClosingDate" runat="server" CssClass="datepicker"></asp:TextBox>
4

2 に答える 2

2

(SQLインジェクションの脆弱性のために)これに反対することを強くお勧めしますが、あなたがやろうとしていることは次のとおりだと思います。

if (!IsPostBack)
{
    MainGridView.DataSource = GetData("select   GroupCategory, Count(Status1) as TotalCount from  [MasterProject] where Closing_Date >= '"+ txtStartClosingDate.Text +"' and Closing_Date <= '"+ txtEndClosingDate.Text +"' and Status1 is not null group by  GroupCategory");
    MainGridView.DataBind();
}

GetDataメソッドはどのように見えますか?SQLパラメータは必要ですか?

于 2013-01-21T23:46:05.680 に答える
1

aspxページの後ろのコードにSQLクエリを書くのは悪い習慣です。多くのソリューションがあり、そのうちの1つは3層構造のアプリケーションを使用しています。aspxページであるGUI、アプリケーションのロジックを処理するビジネスロジック層、クエリまたはストアドプロシージャを呼び出して実際にDBと通信するデータアクセス層です。 、これは実際には、コードにクエリを記述するよりも優れています。なんで?ストアドプロシージャはDBで一度コンパイルされ、毎回コンパイルされるインラインクエリとは異なり、さらに、SQLインジェクションを防ぐのに役立つ変数をストアド価格に渡すことができるためです。

アーキテクチャの例を確認してください。

http://shoutingwords.com/creating-3-tier-layered-application-using-c-sharp.html

ストアドプロシージャ:

http://www.codeproject.com/Articles/38682/Overview-of-SQL-Server-Stored-Procedure

于 2013-01-21T23:59:11.043 に答える