2012-01-19 14 views
1

私にはGridViewSqlDataSourceがあります。 SelectCommandSqlDataSourceDateTime SelectParameterをSqlDataSourceに渡す

SELECT * FROM Transfers WHERE Timestamp >= '{0}' AND Timestamp <= '{1}' 

パラメータのようなものです:このパラメータを設定するI背後にあるコードで次に

<SelectParameters> 
    <asp:Parameter Name="StartDate" Type="DateTime" /> 
    <asp:Parameter Name="EndDate" Type="DateTime" /> 
</SelectParameters> 

protected void gvTransfers_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    e.Command.Parameters["@StartDate"].Value = DateTime.Parse(txtStartDate.Text); 
    e.Command.Parameters["@EndDate"].Value = DateTime.Parse(txtEndDate.Text); 
} 

私は上記のコードをデバッグし、それが良いDateTimeを実行し、設定します値。 GridViewが、それは例外

Conversion failed when converting date and/or time from character string. 

をスローデータバインドされている場合しかし、私は適切な方法でDateTimeを渡す方法を探しに時間を費やしました。私は間違って何をしていますか? SQL、マークアップ、またはコードを変更する必要がありますか?

また、FilterParametersを試してみましたが、さまざまな形式のテキストボックスから日付を取得しましたが、成功しませんでした。

+0

どのSQL Serverバージョンを使用していますか – Devjosh

+0

DateTime.Parse(txtStartDate.Text).ToString( "dd-MMM-yyyy")を使用してみましたか? –

+0

Sql Server 2008 R2 – Episodex

答えて

2

あなたは、このMSDNの記事を確認することができます詳しくは

SELECT * FROM Transfers WHERE Timestamp >= @StartDate AND Timestamp <= @EndDate 

ため

SELECT * FROM Transfers WHERE Timestamp >= '{0}' AND Timestamp <= '{1}' 

を変更する必要があります。http://msdn.microsoft.com/en-us/library/z72eefad.aspx ;-)

+1

ありがとう!今例外はありません:)しかし、結果は適切にフィルタリングされていないようだ、私は今それを調べるだろう。 '' {0} ''形式を使用しました。なぜなら、 '' FilterParameters''はそれを使用していて、 '' SelectParameters''ではそれが違うことに気付かなかったからです。混乱... – Episodex

+1

さて、私の間違いは、今それは完璧です。 – Episodex

4

まず、あなたがすべき二つのものがあります:

  1. を使用してくださいDateTime.TryParse(またはDateTime.TryParseExact)。これにより、文字列を日付に解析し、文字列が正常に解析されたかどうかの信号を得ることができます。
  2. 構文解析に使用する形式を指定します。ハードコードされたもの(特定の形式で日付を入力する必要がある場合)または予想される日付形式を決定するために使用できるCultureInfoを渡すことによって、

第2に@ H27Studioのように、代わりにパラメータを使用するようにSQLクエリを変更する必要があります。

+0

コードの変換がうまくいきました。チェックしました。私は 'e.Command.Parameters [" @ StartDate "]'(およびEndDate)の値もチェックしていました。 SQL Serverからエラーが発生しています。 – Episodex

+0

SQL Serverが実際の日付の代わりに "{0}"と "{1}"をDateTimesとして取得しているためです。 – H27studio

+1

@Episodex:まさにそれがパラメータの問題です。それでも、あなたの解析コードは非常に壊れやすいです。例えば、テキストボックスの1つに「日付ではない」と入力するとどうなりますか? –

関連する問題