数据表C#输入字符串的格式不正确

时间:2016-07-23 14:50:54

标签: c# mysql visual-studio datatable format

我的代码:

false

当我运行代码时,我收到了一个错误。请帮我解决。

error

3 个答案:

答案 0 :(得分:1)

  

预期类型为Int32

如果gtennha包含数字,您可以将其解析为int。有了更多的保障措施:

var gtennha = cmd.ExecuteScalar();
try 
{
   if(gtennha != null)
      dt.Rows[i][1] = int.Parse(gtennha.ToString());
   else 
      Console.WriteLine("Error: Query didn't return a result.");
} 
catch(FormatException ex)
{
   Console.WriteLine("Error: Couldn't parse 'gtennha' to a number.");
   /* more error handling */
}

答案 1 :(得分:1)

将字符串解析为int

DataTable dt = new DataTable();
        mySqlDataAdapter.Fill(dt);
        int socot = dt.Rows.Count;
        for (int i = 0; i < socot; i++)
        {
            String dn = dt.Rows[i][1].ToString();
            String gduan = "SELECT tennha FROM duannha WHERE id=@id";
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = gduan;
            cmd.Parameters.AddWithValue("@id", dn);
            String gtennha = cmd.ExecuteScalar().ToString();
            int a;
            int.TryParse(gtennha, out a);
            dt.Rows[i][1] = a;
        }

<强>更新

如果gtennha总是以VIOFFICE或类似的词开头,那么请使用这种方式拆分字符串

DataTable dt = new DataTable();
        mySqlDataAdapter.Fill(dt);
        int socot = dt.Rows.Count;
        for (int i = 0; i < socot; i++)
        {
            String dn = dt.Rows[i][1].ToString();
            String gduan = "SELECT tennha FROM duannha WHERE id=@id";
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = gduan;
            cmd.Parameters.AddWithValue("@id", dn);
            String gtennha = cmd.ExecuteScalar().ToString();
            int a;
            int.TryParse(gtennha.Split(' ')[1], out a);
            dt.Rows[i][1] = a;
        }

答案 2 :(得分:0)

我认为您选择了错误的列来分配ExecuteScalar查询的返回值。从您的错误消息可以清楚地看到,返回值是一个字符串“VI BUILDING 29BD”(或类似的东西),并且您试图将该值分配给您用作源的同一列&nbsp ID参数。这当然不可能是正确的。

因此,您需要确定要为ExecuteScalar的返回值分配的列是什么,并且在处理返回值时要特别小心,如果WHERE子句上没有匹配则该返回值可能为NULL

dispatch_async(dispatch_get_main_queue(), ^{
            [self.mytable reloadData];