简体   繁体   English

从C#中的字符串转换日期和/或时间时转换失败

[英]Conversion failed when converting date and/or time from character string in C#

This is the connection class: 这是连接类:

public string InsertarTecnico(int IdNumTecnico, string NombresTecnico, string ApellidosTecnico, string DireccionTecnico, string TelefonoTecnico, string ProvinciaTecnico, string CiudadTecnico, string TipoTecnico, string FechaTecnico)
    {
        string salida = "Datos guardados";

        try
        {
            cmd = new SqlCommand("Insert into TECNICO(NUMIDTECNICO, NOMBRETECNICO, APELLIDOTECNICO, DIRECCIONTECNICO, TELEFONOTECNICO, PROVINCIATECNICO, CIUDADTECNICO, FECHAYHORATECNICO, TIPO) values(" + IdNumTecnico + ", '" + NombresTecnico + "', '" + ApellidosTecnico + "', '" + DireccionTecnico + "', '"+TelefonoTecnico+"', '" + ProvinciaTecnico + "', '"+CiudadTecnico+"', '" + TipoTecnico + "', '" + FechaTecnico + "')", cn);
            cmd.Parameters.AddWithValue("@FechaTecnico", DateTime.Now);
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            salida = "No se puedo duardar los datos... " + ex.ToString();
        }
        return salida;
    }

This is the control code: 这是控制代码:

private void SaveTechnicalButton_Click(object sender, EventArgs e)
    {
        if (Conex.TecnicoRegistrado(Convert.ToInt32(IdTechnical.Text))==0)
        {
            MessageBox.Show(Conex.InsertarTecnico(Convert.ToInt32(IdTechnical.Text), NameTechnical.Text, LastNameTechnical.Text, AdressTechnical.Text, PhoneTechnical.Text, ProvinceTechnical.Text, CityTechnical.Text, SelectChiefTechnical.Text, DateTime.Parse(DateEnterTechnical.Text)));
        }
        else
        {
            MessageBox.Show("La persona que intenta ingresar ya se encuentra registrada");
        }
    }

enter image description here 在此处输入图片说明

The problem is conversion failed when converting date and/or time from character string 问题是从字符串转换日期和/或时间时转换失败

The order of the arguments are incorrect: 参数的顺序不正确:

MessageBox.Show(Conex.InsertarTecnico(Convert.ToInt32(IdTechnical.Text), NameTechnical.Text, LastNameTechnical.Text, AdressTechnical.Text, PhoneTechnical.Text, CityTechnical.Text, ProvinceTechnical.Text, PhoneTechnical.Text, DateEnterTechnical.Text));

InsertarTecnico(int IdNumTecnico, string NombresTecnico, string ApellidosTecnico, string DireccionTecnico, string TelefonoTecnico, string ProvinciaTecnico, string CiudadTecnico, string FechaTecnico, string TipoTecnico)

You are passing DateEnterTechnical to TipoTecnico and twice TelefonoTechnico 您正在将DateEnterTechnical传递给TipoTecnico和两次TelefonoTechnico

The order seem to be: 顺序似乎是:

MessageBox.Show(Conex.InsertarTecnico(Convert.ToInt32(IdTechnical.Text), NameTechnical.Text, LastNameTechnical.Text, AdressTechnical.Text, PhoneTechnical.Text, ProvinceTechnical.Text, CityTechnical.Text, DateTime.Parse(DateEnterTechnical.Text), tipoTecnico));

Make sure to parse the DateEnterTechnical to DateTime: 确保将DateEnterTechnical解析为DateTime:

DateTime.Parse(DateEnterTechnical.Text)

Also, your code is subject to SQL injection . 此外,您的代码还可以进行SQL注入 Considering using SqlParameters . 考虑使用SqlParameters

You have to properly reformat text that is taken from DateEnterTechnical.Text control and passed to InsertarTecnico function as the last argument string TipoTecnico - as your date cannot be recognized by the database. 您必须正确地重新格式化从DateEnterTechnical.Text控件获取并作为最后一个参数string TipoTecnico传递给InsertarTecnico函数的文本,因为数据库无法识别您的日期。

Ideally, you should 理想情况下,您应该

  • use some kind of calendar control on your form, to get a date from control, not a string 在窗体上使用某种日历控件,以从控件而不是字符串中获取日期
  • if you are getting a string, then parse it as date using, for example DateTime.ParseExact with a specific format string 如果获取字符串,则使用例如具有特定格式字符串的 DateTime.ParseExact将其解析为日期。
  • format your date into ODBC canonical form when creating insert statement 创建插入语句时将日期格式化为ODBC规范形式
  • remove direct usage of SQL queries from code, and replace it with a stored procedure, and pass parameters to your command 从代码中删除对SQL查询的直接使用,并将其替换为存储过程,然后将参数传递给命令

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将C#datetime发送到SQL Server-错误“从字符串转换日期和/或时间时转换失败” - Send C# datetime to SQL Server - error “Conversion failed when converting date and/or time from character string” 从字符串转换日期和/或时间时,C#转换失败 - C# Conversion failed when converting date and/or time from character string 从C#中的字符串SQL转换日期和/或时间时转换失败 - Conversion failed when converting date and/or time from character string SQL in c# 从字符串C#转换日期和/或时间时转换失败 - Conversion failed when converting date and/or time from character string C# 从字符串 SQL (c#) 转换日期或时间时,日期时间转换失败 - datetime conversion failed when converting date or time from character string SQL (c#) 使用日期时间选择器从字符转换日期和/或时间时,C# 转换失败 - C# Conversion failed when converting date and/or time from character with a date time picker C#“从字符串转换日期/时间时转换失败”但查询在服务器上运行时效果很好 - C# "Conversion failed when converting date/time from character string" But query works well when run on server 从字符串转换日期和/或时间时转换失败 - Conversion failed when converting date and /or time from character string 从字符串转换日期和/或时间时转换失败 - Conversion failed when converting date and /or time from character string 从字符串错误4转换日期和/或时间时转换失败 - Conversion failed when converting date and/or time from character string error 4
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM