2016-09-22 14 views
3

私は日付がユーザーによって入力を取得するテキストボックスとテキストボックスのカレンダーエクステンダーを使用していたWebアプリケーションを作成していますが、私はこの("dd-MM-yyyy")形式で日付をしたい、変換日付タイプC#

が、私はエラー

を取得しています

(算術オーバーフローエラーがデータ・タイプ 日時に式を変換する。)

デフォルトで日付の形式は("yyyy-MM-dd")この

0123であります
protected void txttodate_TextChanged(object sender, EventArgs e) 
{ 
    string com = Convert.ToString(Session["radio"]); 
    string com1 = Convert.ToString(Session["mysession"]); 
    Session["drd3"] = com.ToString(); 
    Session["lblname"] = com1.ToString(); 

    SqlCommand cmdtr = new SqlCommand("select empname from trainerdetails where trid='"+com1.ToString()+"'",con); 
    con.Open(); 
    SqlDataReader dr = cmdtr.ExecuteReader(); 
    while (dr.Read()) 
    { 
     lblempname.Text = dr["empname"].ToString(); 
    } 
    GridView1.Visible = true; 
    connectionstr = WebConfigurationManager.ConnectionStrings["Constr"].ConnectionString; 
    con = new SqlConnection(connectionstr); 
    SqlCommand cmd = new SqlCommand("csuvdaterange"); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Connection = con; 
    SqlParameter[] param = 
    { 
     new SqlParameter("@logintype",com.ToString()), 
     new SqlParameter("@name",lblempname.Text), 
     new SqlParameter("@datefrm",txtfrmdate.Text), 
     new SqlParameter("@dateto",txttodate.Text) 
    }; 
    cmd.Parameters.AddRange(param); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 
} 

これは私のバックエンドコードusingステートメントを使用して、パラメータ化SQLを使用して上のJonの提案を実装した後、あなたはその確実な場合

<asp:TextBox ID="txtfrmdate" Visible="false" runat="server" placeholder="From" style="margin-left:10px; margin-top:8px;" Height="30px" Width="200px"></asp:TextBox> 
    <asp:CalendarExtender ID="calenderfromextend" TargetControlID="txtfrmdate" runat="server" Format="dd-MM-yyyy"></asp:CalendarExtender> 
    <asp:TextBox ID="txttodate" placeholder="To" Visible="false" runat="server" style="margin-left:10px; margin-top:8px;" AutoPostBack="true" OnTextChanged="txttodate_TextChanged" Height="30px" Width="200px"></asp:TextBox> 
    <asp:CalendarExtender ID="calendertoextend" TargetControlID="txttodate" runat="server" Format="dd-MM-yyyy"></asp:CalendarExtender> 

私のテキストボックスとカレンダーエクステンダー

+6

修正するためにまず最初に:あなたの選択でパラメータ化SQLを使用しますクエリ。次に、アプリケーション*で日付解析を行い、その値を 'DateTime'として渡すことを強くお勧めします。次に、あなたはあなたの接続やコマンドなどのために 'using'ステートメントを使用しているはずです –

+1

@JonSkeetはすべてに注意を払いました。 –

答えて

2

をどのように見えるかですTextBoxに入力された日付は "yyyy-MM-dd"の形式で、このコードを使用して書式文字列を変更することができます。

SqlParameter[] param = 
{ 
    new SqlParameter("@logintype",com.ToString()), 
    new SqlParameter("@name",lblempname.Text), 
    new SqlParameter("@datefrm",DateTime.ParseExact(txtfrmdate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd")), 
    new SqlParameter("@dateto",DateTime.ParseExact(txttodate.Text, "dd-MM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd")) 
}; 
+0

' Stringは有効なDateTimeとして認識されませんでした。 ' –

+0

@IbrahimShaikh入力されていますか? – sachin

+0

"dd-MM-yyyy"と書かれていますが、Sqlは "yyyy-MM-dd"と書かれていますので、正しいものは 'new SqlParameter(" @ datefrm "、DateTime.ParseExact(txtfrmdate.Text、 CultureInfo.InvariantCulture).ToString( "yyyy-MM-dd"))、 – Jacky

0

まず、その後DateTime.ParseExact

var dateFrom = DateTime.ParseExact(txtfrmdate.Text, "dd-MM-yyyy", null); 
var dateTo = DateTime.ParseExact(txttodate.Text, "dd-MM-yyyy", null); 

でDateTimeオブジェクトにあなたのテキストボックスを解析し、あなたのSqlParameterに置き換える:

SqlParameter[] param = 
{ 
    new SqlParameter("@logintype",com.ToString()), 
    new SqlParameter("@name",lblempname.Text), 
    new SqlParameter("@datefrm",SqlDbType.DateTime) { Value = dateFrom }, 
    new SqlParameter("@dateto", SqlDbType.DateTime) { Value = dateTo } 
}; 
-1
String.Format("{0:MM/dd/yyyy}", dt);