Member 13771716 Ответов: 1

- Не удалось преобразовать значение параметра из строки в дату-время.


В настоящее время я получаю эту ошибку при попытке выбрать дату из выпадающего списка, как только дата выбрана, она должна отображать данные в виде сетки в зависимости от значения выпадающего списка. Это достигается с помощью оператора 'Where', равного значению выбранного индекса.

Я понимаю, что это проблема с тем, как даты отображаются в выпадающем списке, а не с тем, как они сохраняются в базе данных. Поэтому я попытался поменять формат с dd/mm/yyyy на yyyy/mm/dd в выпадающем списке, чтобы посмотреть, исправит ли это проблему. Но я никак не могу заставить его работать.

Пожалуйста, может ли кто-нибудь порекомендовать исправить это?

Выпадающем списке выбрано изменение индекса с# :
protected void DropDownList2_SelectedIndexChanged(object sener, EventArgs e)
        {
            String query = "SELECT Stock_Take.Username, Item.ItemID, Item.ItemDesc, Stock_Take_Item.BarQuantity, Stock_Take_Item.StorageQuantity, Stock_Take.StockTakeIDNew FROM Item INNER JOIN Stock_Take_Item ON Item.ItemID = Stock_Take_Item.ItemID INNER JOIN Stock_Take ON Stock_Take_Item.StockTakeIDNew = Stock_Take.StockTakeIDNew where Stock_Take.Username = @USER AND Stock_Take.StockDate = @DATE";

            SqlConnection con = new SqlConnection(@"Data Source=(local)\;Initial Catalog=SmallBatch;Integrated Security=True;");
            con.Open();
            SqlCommand cmd = new SqlCommand(query, con);

            cmd.Parameters.Add("@USER", SqlDbType.VarChar).Value = DropDownList1.SelectedValue;
            cmd.Parameters.Add("@DATE", SqlDbType.DateTime).Value = DropDownList2.SelectedValue;
           // DateTime date = Convert.ToDateTime(DropDownList2.SelectedValue.ToString());
            SqlDataReader reader = cmd.ExecuteReader();
            GridView1.DataSource = reader;
            GridView1.DataBind();
            con.Close();
         

        }


Привязка дат из базы данных к выпадающему списку кода C# :
private void BindDropDownList2(String field)
        {
            DataTable dataTable = new DataTable();
            SqlConnection con = new SqlConnection(@"Data Source=(local)\;Initial Catalog=SmallBatch;Integrated Security=True;");
            try
            {
                con.Open();
                String Query = "Select StockDate, StockTakeIDNEW from Stock_Take WHERE Username = @Value1";
                SqlCommand sqlCmd = new SqlCommand(Query, con);
                sqlCmd.Parameters.AddWithValue("@Value1", field);
               
                SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
                sqlDa.Fill(dataTable);
                if (dataTable.Rows.Count > 0)
                {
                    DropDownList2.DataSource = dataTable;
                    DropDownList2.DataTextField = "StockDate";
                    DropDownList2.DataValueField = "StockTakeIDNew";
                   // DropDownList2.DataTextFormatString = "(yyyy/MM/dd}";
                    DropDownList2.DataBind();
                }
               
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                string msg = "Fetch Error";
                msg += ex.Message;
                throw new Exception(msg);
            }
            finally
            {
                con.Close();
            }


        }


Что я уже пробовал:

*У меня также есть еще один выпадающий список, из которого пользователь выбирает имя пользователя, что, в свою очередь, влияет на то, какие даты отображаются в выпадающем списке 2

j snooze

А ты пробовал
УМК.Параметры.Добавить("@дата", значения sqldbtype.Типа datetime).Значение = Конвертировать.Датавремя(DropDownList2.SelectedValue)

Member 13771716

К сожалению, возвращает ту же ошибку.

1 Ответов

Рейтинг:
2

an0ther1

Вам нужно преобразовать это значение в значение DateTime.

Вы можете использовать DateTime.TryParse - ссылка; значение datetime.Метод TryParse (String, DateTime) (System)[^] или значение datetime.Метод TryParse (String, IFormatProvider, DateTimeStyles, DateTime) (System)[^]

В качестве альтернативы вы можете использовать DateTime.TryParseExact - ссылка; значение datetime.Метод TryParseExact (Система)[^]

Примечание: Если вам просто нужно значение даты - т. е. нет компонента времени, SQL анализирует формат "yyyymmdd" независимо от параметров сортировки базы данных;

с уважением