簡體   English   中英

錯誤“從字符串轉換日期和/或時間時轉換失敗”

[英]Error “Conversion failed when converting date and/or time from character string”

我有一個令人討厭的SQL查詢,當獲取日期值時失敗:

 String strQuery = @"SELECT TOP 100000" +
    "[dbo].[Service].[company_name] AS 'Company Name', [dbo].[Service].[status_description] AS 'Status Description'," +
    "DATEPART(month, [dbo].[Service].[date_entered]) AS 'Month', COUNT([dbo].[Service].[status_description]) AS 'Count'" +
    "FROM [dbo].[Service] WITH(NOLOCK)" +
    "WHERE  ([dbo].[Service].[status_description] = @Status)" +

    // ****  I used the following to get values from Ajax CalendarExtender 
    // **** (Ajax Format from: yyyy-MM-ddTHH:mm:ss.mmm to: yyyy-MM-ddT23:59:59.000) *******
    "AND ([dbo].[Service].[date_entered] BETWEEN '@DateFrom' AND '@DateTo')" +

    "GROUP BY [dbo].[Service].[company_name], [dbo].[Service].[status_description]," +
    "DATEPART(month, [dbo].[Service].[date_entered])" +
    "ORDER BY [dbo].[Service].[status_description] ASC;";

    System.Globalization.CultureInfo en = new System.Globalization.CultureInfo("en-US");
    SqlConnection con = new SqlConnection(strConnString);
    SqlCommand cmd = new SqlCommand(strQuery + "", con);
    cmd.Parameters.AddWithValue("@Status", DdlTickets.SelectedItem.Value);
    cmd.Parameters.AddWithValue("@DateFrom", TxtDateFrom.Text);
    cmd.Parameters.AddWithValue("@DateTo", TxtDateTo.Text);        

    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    cmd.Connection = con;
    try
    {
        con.Open();
        if (DdlTickets.Items.Count > 1)
        {
            da.Fill(ds, strQuery);

            // *** the values come from Ajax, but when It gets to fill the Gridview, it fails with error ****

            GridView1.DataSource = ds.Tables[strQuery];
            GridView1.DataBind();
            BtnCSV.Visible = true;
        }
        if (GridView1.Rows.Count <= 0)
        {
            BtnCSV.Visible = false;
        }
        else
        {
            //Set Later
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        con.Close();
        con.Dispose();
    }

我嘗試使用以下代碼從CalendarExtender轉換默認值,但是它不起作用:

cmd.Parameters.AddWithValue("@DateFrom", DateTime.ParseExact(TxtDateFrom.Text, "yyyy-MM-ddTHH:mm:ss.mmm", CultureInfo.InvariantCulture));
cmd.Parameters.AddWithValue("@DateTo", DateTime.ParseExact(TxtDateTo.Text, "yyyy-MM-ddTHH:mm:ss.mmm", CultureInfo.InvariantCulture));

如果我執行以下查詢而不是上面的查詢,並直接獲取值,則可以使用:

"AND ([dbo].[Service].[date_entered] BETWEEN '2015-04-02T00:00:00.000' AND '2015-09-02T23:59:59.000')" +

關於可能導致錯誤的原因的任何想法? 非常感謝您的幫助!

您不需要為參數使用單引號。 使用單引號時,您的數據庫管理器將其視為字符串文字而不是參數。

只需刪除它們。 如果其他一切都還不錯,那么它將起作用。

AND ([dbo].[Service].[date_entered] BETWEEN @DateFrom AND @DateTo)

還有幾件事;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM