$ultaNn Ответов: 6

Преобразование не удалось при преобразовании даты и/или времени из символьной строки.


получение ошибки после преобразования

private void LoadData()
    {
        con.Open();
      
        string s = "SELECT user_name FROM login" + " WHERE user_name='" + Label1.Text + "'";
        SqlCommand cmd = new SqlCommand(s, con);
        SqlDataReader Dr = cmd.ExecuteReader();
        if (Dr.Read())
        {
            con.Close();
            DateTime datetime = Convert.ToDateTime(Date.Text);
            string query = @"SELECT id,Build_name,Dept,Floor_no,Call_recv FROM  Tech_data where Call_assign='" + Label1.Text + "'  and date_time='" + datetime  + "'";

            SqlDataAdapter da = new SqlDataAdapter(query, con);
            DataTable table = new DataTable();
            da.Fill(table);

            GridView1.DataSource = table;
            GridView1.DataBind();
        }

    }

6 Ответов

Рейтинг:
36

$ultaNn

tried this worked fine . thnk you all


DateTime datetime = Convert.ToDateTime(Date.Text);
            SqlCommand cmnd = new SqlCommand("SELECT * FROM  Tech_data where Call_assign= @Call_assign and dateadd(dd, datediff(dd,0, [date_time]), 0) = @date_time ");
            cmnd.Connection = con;
            cmnd.Parameters.Add("@Call_assign", SqlDbType.VarChar).Value = Label1.Text;
            cmnd.Parameters.Add("@date_time", SqlDbType.DateTime).Value = datetime.Date;
            SqlDataAdapter da = new SqlDataAdapter(cmnd);
            DataSet ds = new DataSet();
            da.Fill(ds);


Рейтинг:
2

Matej Hlatky

Воспользуйся Параметры[^] коллекция для назначения входных параметров пользователя в команды SQL.
Вы можете попробовать это:

string s = "SELECT user_name FROM login WHERE user_name = @u"; // there are no apostrophes around %u!
SqlCommand cmd = new SqlCommand(s, con);
cmd.Parameters.AddWithValue("@u", Label1.Text);

Сделайте то же самое с датой и временем - просто создайте другую команду с параметром @d и поместите ее в свой SqlDataAdapter вместо простого sql-запроса.

Почему вы закрываете свое соединение (con) следом Dr.Read() ?


Рейтинг:
1

Mr. Mahesh Patel

Привет Дорогая,

Пожалуйста, проверьте эту дату.Текст - это в каком формате.
Если он находится в dd/MM/yyyy или dd-MM-yyyy, то он выдаст ошибку при преобразовании строки в datetime в приведенном ниже операторе.
DateTime datetime = конвертировать.Объект Todatetime(Дата.Текст);

в этом случае ваша дата должна быть в ММ-ДД-гггг или гггг-ММ-ДД

В другом случае пожалуйста измените приведенное ниже заявление
строка запроса = @"выбрать идентификатор,Build_name,отдел,Floor_no,Call_recv от Tech_data где Call_assign='" + элемент Label1.Text + "' и date_time='" + datetime + "'";

к

строка запроса = @"выбрать идентификатор,Build_name,отдел,Floor_no,Call_recv от Tech_data где Call_assign='" + элемент Label1.Текст + "' и date_time='" + datetime.ToString("гггг-ММ-ДД чч:мм:СС.ФФФ") + "'";


Saja Nasser Alkazemi

Ок спасибо

Рейтинг:
1

SuperJWP

привет у меня такая же ошибка когда я пытаюсь выполнить свой скрипт

Вот мой сценарий, который я использую:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace InventoryStock
{
    public partial class Workstations : Form
    {
        public Workstations()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void label1_Click_1(object sender, EventArgs e)
        {

        }

        private void Workstations_Load(object sender, EventArgs e)
        {
            comboBox3.SelectedIndex = 0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            SqlConnection con = new SqlConnection(@"Data Source=sh-jasonk\dev;Initial Catalog=ITInventory;Integrated Security=True");
            //Insert Logic
            con.Open();
            bool Wkst_Status = false;
            if (comboBox1.SelectedIndex == 0)
            {
                Wkst_Status = true;
            }
            else
            {
                Wkst_Status = false;
            }
            
            SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[Workstations]
           ([Emp_Id]
           ,[Emp_Name]
           ,[Emp_Surname]
           ,[Department]
           ,[Company]
           ,[Hostname]
           ,[Wkst_Status]
           ,[Make]
           ,[Model]
           ,[SerialNumber]
           ,[ProductNumber]
           ,[Purch_Date]
           ,[WExpiry_Date]
           ,[Memory]
           ,[Processor]
           ,[HDD]
           ,[OS])
          
     VALUES
           ('" + Emp_ID.Text + "','" + txtName.Text + "','" + txtSurname.Text + "','" + comboBox1.Text + "','" + comboBox2.Text + "','" + txtHostName.Text + "','" + comboBox3.SelectedIndex + "','" + txtMake.Text + "','" + txtModel.Text + "','" + txtSN.Text + "','" + txtPN.Text + "','" + dateTimePicker1.Text + "','" + dateTimePicker2.Text + "','" + txtMem.Text + "','" + txtProc.Text + "','" + txtHDD.Text + "','" + txtOS.Text + "')",con);
          
            //Conversion failed here
            cmd.ExecuteNonQuery();
            con.Close();
            DateTime datetime = Convert.ToDateTime(dateTimePicker1.Text);
            //Reading Data
            SqlDataAdapter sda = new SqlDataAdapter("Select * From [dbo].[Workstations]", con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.Rows.Clear();

            foreach (DataRow item in dt.Rows)
            {
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[0].Value = item["Emp_Name"].ToString();
                dataGridView1.Rows[n].Cells[1].Value = item["Emp_Surname"].ToString();
                dataGridView1.Rows[n].Cells[2].Value = item["Department"].ToString();
                dataGridView1.Rows[n].Cells[3].Value = item["Company"].ToString();
                dataGridView1.Rows[n].Cells[4].Value = item["Hostname"].ToString();
                if ((bool)item["Wkst_Status"])
                {
                    dataGridView1.Rows[n].Cells[5].Value = "Active";
                }
                else
                {
                    dataGridView1.Rows[n].Cells[5].Value = "Inactive";
                }

              
                dataGridView1.Rows[n].Cells[6].Value = item["Make"].ToString();
                dataGridView1.Rows[n].Cells[7].Value = item["Model"].ToString();
                dataGridView1.Rows[n].Cells[8].Value = item["SerialNumber"].ToString();
                dataGridView1.Rows[n].Cells[9].Value = item["ProductNumber"].ToString();
                dataGridView1.Rows[n].Cells[10].Value = item["Purch_Date"].ToString();
                dataGridView1.Rows[n].Cells[11].Value = item["WExpiry_Date"].ToString();
                dataGridView1.Rows[n].Cells[12].Value = item["Memory"].ToString();
                dataGridView1.Rows[n].Cells[13].Value = item["Processor"].ToString();
                dataGridView1.Rows[n].Cells[14].Value = item["HDD"].ToString();
                dataGridView1.Rows[n].Cells[15].Value = item["OS"].ToString();
            }

        }
    
        private void label17_Click(object sender, EventArgs e)
        {

        }
    }
}


Richard Deeming

Если вы хотите задать вопрос, то ЗАДАВАТЬ ВОПРОС[^].

НЕ разместите свой вопрос как "решение" на чей-то другой вопрос.

Рейтинг:
0

OriginalGriff

Для этого есть несколько причин, но наиболее распространенной является то, что введенная дата не находится в том же формате, что и текущая Локаль для компьютера, ожидаемая - или пользователь набрал мусор, конечно! :смеяться:

Первое, что я бы сделал, - это не использовал текстовое поле для ввода даты: вместо этого я бы использовал DateTimePicker, если бы мог, так как это не позволяет пользователю вводить недопустимую дату, а также не нуждается в преобразовании, поскольку непосредственно предоставляет значение DateTime.

Если бы это было невозможно, я бы использовал DateTime.TryParse или DateTime.Метод tryparseexact, а не конвертировать.ToDateTime, чтобы устранить ошибки пользователя, прежде чем я открою какие-либо соединения или сделаю что-нибудь еще. Проверьте свои данные и сообщите об ошибках, прежде чем приступить к обработке!


Рейтинг:
0

Member 4643397

If the problem persists while executing your code, perhaps it is due to two important reasons:

1. Yo have used the ' DateTime.Now.ToShortString' or similar auto conversion method, and
2. You changed the computers default Datetime format in the setting.

Change the Datetime format of the computer or change the autoconversion to 'parse' method.


Richard Deeming

Почему вы думаете, что проблема сохраняется, когда вопрос уже помечен как "решенный"?

И если бы вы использовали параметры, как предполагают существующие решения, то вам не нужно было бы возиться с форматами дат.