简体   繁体   English

从字符串转换日期时间时转换失败

[英]Conversion failed when converting datetime from character string

I try reading data from SQL Server 2005 and filling it in a TableAdapter (also tried to user DataReader) but I keep getting this exception. 我尝试从SQL Server 2005读取数据并将其填充到TableAdapter中(也尝试使用DataReader),但我一直收到此异常。 The thing is that I get this error on some systems, that is I run my application peacfully on a system but on another system I get this exception. 问题是在某些系统上出现此错误,即我在一个系统上正常运行我的应用程序,但在另一个系统上却遇到此异常。

The Code is: 该代码是:

public DataSetRef GetReportPumpControl(PumpInfo pump, DateTime start, DateTime end)
    {
        if (!OpenConnection())
            return null;

        m_Command.CommandText = "SELECT ref_dig_pumpcontrol, ref_energy, ref_datetime FROM [molisoftSchema].[Refresh] WHERE ref_pump_id = " + pump.ID + " AND ref_datetime BETWEEN '" + start + "' AND '" + end + "' ORDER BY ref_datetime ASC";

        SqlDataAdapter adapter = new SqlDataAdapter(m_Command);
        DataSetRef ds = new DataSetRef();
        adapter.Fill(ds, "RefreshPC");

        return ds;

        /*m_Reader = m_Command.ExecuteReader();

        LinkedList<PumpControlInfo> returnValue = new LinkedList<PumpControlInfo>();
        while (m_Reader.Read())
        {
            PumpControlInfo tempControl = new PumpControlInfo();
            tempControl.DateTime = (DateTime)m_Reader["ref_datetime"];
            tempControl.Energy = (double)m_Reader["ref_energy"];
            tempControl.PumpControl = (bool)m_Reader["ref_dig_pumpcontrol"];

            returnValue.AddLast(tempControl);
        }
        m_Reader.Close();
        return returnValue.ToArray<PumpControlInfo>();*/
    }

Please help me with this matter. 请帮我解决这个问题。 Thanks in advance! 提前致谢!

Kill 2 birds with 1 stone and parameterise your SQL (will guard you against SQL injection attacks): 用1块石头杀死2只鸟,并为您的SQL设置参数(将防止SQL注入攻击):

m_Command.CommandText = "SELECT ref_dig_pumpcontrol, ref_energy, ref_datetime FROM [molisoftSchema].[Refresh] WHERE ref_pump_id = @pumpid AND ref_datetime BETWEEN @StartDate AND @EndDate ORDER BY ref_datetime ASC";

m_Command.Parameters.AddWithValue("@pumpid", pump.ID);
m_Command.Parameters.AddWithValue("@StartDate", start);
m_Command.Parameters.AddWithValue("@EndDate", end);

The problem was because the .NET start and end DateTime values are being serialised to a string to "hard code" into the SQL you were generating. 问题是因为.NET的开始和结束DateTime值被序列化为字符串,以“硬编码”到生成的SQL中。 However, this string representation could not be translated back into a valid datetime in SQL (you'd need to use a SAFE date format like yyyy-MM-ddTHH:mm:ss - so explicitly format those DateTimes before appending into the SQL statement). 但是,此字符串表示形式无法转换回SQL中的有效日期时间(您需要使用SAFE日期格式,例如yyyy-MM-ddTHH:mm:ss-因此在追加到SQL语句之前明确格式化这些DateTimes) 。 However, parameterisation is the far better solution which gets round these kinds of problems. 但是,参数化是解决这些问题的更好的解决方案。

You should set your query values as parameters rather than just using string concatenation (and with it implicit conversion). 您应该将查询值设置为参数,而不是仅使用字符串连接(及其隐式转换)。 Try: 尝试:

m_Command.CommandText = "SELECT ref_dig_pumpcontrol, ref_energy, ref_datetime FROM [molisoftSchema].[Refresh] WHERE ref_pump_id = @id AND ref_datetime BETWEEN @start AND @end ORDER BY ref_datetime ASC";
m_Command.Parameters.AddWithValue("@id", pump.ID);
m_Command.Parameters.AddWithValue("@start", start);
m_Command.Parameters.AddWithValue("@end", end);

Aside from being better practice overall, this will use the conversion properties in place in parameters which are better designed for this sort of thing than implicit inline string conversion. 除了从整体上更好地实践之外,这将在参数中使用转换属性,该参数比隐式内联字符串转换更好地针对这种情况而设计。

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

相关问题 从C#中的字符串转换日期时间时转换失败 - Conversion failed when converting datetime from character string in C# 从字符串转换日期和/或时间时,DateTime转换失败 - DateTime conversion failed when converting date and/or time from character string 从字符串转换日期时间时转换失败 - Conversion failed when converting datetime from character string 从字符串转换日期时间时转换失败 - Conversion failed when converting datetime from character string 从字符串转换日期时间时转换失败 - Conversion failed when converting datetime from character string 从字符串DateTime转换日期和/或时间时转换失败 - Conversion failed when converting date and/or time from character string DateTime 从asp.net mvc 5中的字符串转换日期时间时,转换失败 - conversion failed when converting datetime from character string in asp.net mvc 5 将C#datetime发送到SQL Server-错误“从字符串转换日期和/或时间时转换失败” - Send C# datetime to SQL Server - error “Conversion failed when converting date and/or time from character string” 从字符串转换日期时间时转换失败。 Linq To SQL和OpenXML - Conversion failed when converting datetime from character string. Linq To SQL & OpenXML 错误:从字符串.NET SQL Server转换日期时间时转换失败 - Error: Conversion failed when converting datetime from character string .NET SQL Server
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM