【问题标题】:Data truncated for column 'Value1' at row 1 in C#C# 中第 1 行的列“Value1”的数据被截断
【发布时间】:2013-12-24 18:28:59
【问题描述】:

我正在 VS2010 c# 中开发一个应用程序,用于从 SQL Server 获取单行数据并将其插入 MySQL。

在此我正在获取数据并尝试使用以下代码插入 MySQL。

var msCon = new MySqlConnection(Properties.Settings.Default.dConstr);//open MySql connection
                var mcmd = msCon.CreateCommand();
                conSsDate = DateTime.Parse(ssDate).ToString("yyyy-MM-dd HH:mm:ss");
                mcmd.CommandText = "INSERT INTO sfr_raw_aqi(date_time,station_id,Value1,Value2,Value3,Value4,Value5,Value6,Value7,Value8,Value9) VALUES(@date_time,@station_id,@Value1,@Value2,@Value3,@Value4,@Value5,@Value6,@Value7,@Value8,@Value9)";//passing insert command.
                //adding parameters
                mcmd.Parameters.AddWithValue("@date_time", conSsDate);
                mcmd.Parameters.AddWithValue("@station_id", station);
                mcmd.Parameters.AddWithValue("@Value1", Value1);
                mcmd.Parameters.AddWithValue("@Value2", Value2);
                mcmd.Parameters.AddWithValue("@Value3", Value3);
                mcmd.Parameters.AddWithValue("@Value4", Value4);
                mcmd.Parameters.AddWithValue("@Value5", Value5);
                mcmd.Parameters.AddWithValue("@Value6", Value6);
                mcmd.Parameters.AddWithValue("@Value7", Value7);
                mcmd.Parameters.AddWithValue("@Value8", Value8);
                mcmd.Parameters.AddWithValue("@Value9", Value9);
                msCon.Open();
                int count = mcmd.ExecuteNonQuery();//executing query.
                msCon.Close();

当控制到线时

int count = mcmd.ExecuteNonQuery();//executing query.

我收到错误 Data truncated for column 'Value1' at row 1。我不知道它是如何给出这个错误的。

我的数据库架构如下。

CREATE TABLE `sfr_raw_aqi` (
`r_aqi` int(11) unsigned NOT NULL AUTO_INCREMENT,
`station_id` varchar(50) DEFAULT NULL,
`date_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Value1` float DEFAULT NULL,
`Value2` float DEFAULT NULL,
`Value3` float DEFAULT NULL,
`Value4` float DEFAULT NULL,
`Value5` float DEFAULT NULL,
`Value6` float DEFAULT NULL,
`Value7` float DEFAULT NULL,
`Value8` float DEFAULT NULL,
`Value9` float DEFAULT NULL,
`benzene` float DEFAULT NULL,
`mpxylene` float DEFAULT NULL,
`oxylene` float DEFAULT NULL,
`toluene` float DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`r_aqi`)
) ENGINE=InnoDB AUTO_INCREMENT=227 DEFAULT CHARSET=latin1;

告诉我如何解决这个问题。

【问题讨论】:

  • 您尝试在Value1 中插入的数据是什么?
  • @bansi 我只是插入 4-5 位数字
  • 我想知道变量Value1 的数据类型是什么?或者您是否尝试通过在Value1 行提供断点进行调试?
  • 它适用于我sqlfiddle.com/#!2/3abdba/1 问题可能在 C# 中

标签: c# mysql insert insert-update


【解决方案1】:

您可以在插入之前检查 Empty 值,因为 Empty 值不等于 Null。

试试这个:

if(!value1.Trim().Eqlals("") && !value2.Trim().Eqlals("") && !value3.Trim().Eqlals("") &&   
!value4.Trim().Eqlals("") && !value5.Trim().Eqlals("") && !value6.Trim().Eqlals("") &&    
!value7.Trim().Eqlals(""))
{
//Execute query
}

【讨论】:

    【解决方案2】:

    您可能尝试插入比列定义更长的数据,更改浮点定义以适应它。也许使用double

    【讨论】:

    • 我只是想在其中插入 4-5 位数字。这么多的存储不是可以通过浮动来实现的吗?
    • 不,它应该可以工作。奇怪。当你指定长度 FLOAT(8,2) 时会发生什么?
    【解决方案3】:

    floatC#mySQL 中都是 32 位单精度,所以如果您的 Value1 是双精度 那么它是 64 位双精度,那么你就有问题了。我不是说 你的 Value1 是双倍的,但这只是一个猜测。那么,为什么不通过以下任一方式将您的 Value1 转换为浮动:

    mcmd.Parameters.AddWithValue("@Value1", Convert.ToSingle(Value1));
    

    mcmd.Parameters.AddWithValue("@Value1", float.Parse(Value1.ToString()));
    

    mcmd.Parameters.AddWithValue("@Value1", (float)Value1);
    

    【讨论】:

      猜你喜欢
      • 2014-01-09
      • 2021-03-14
      • 2021-08-19
      • 1970-01-01
      • 2019-11-18
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多