答案 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”(或类似的东西),并且您试图将该值分配给您用作源的同一列 
ID参数。这当然不可能是正确的。
因此,您需要确定要为ExecuteScalar的返回值分配的列是什么,并且在处理返回值时要特别小心,如果WHERE子句上没有匹配则该返回值可能为NULL
dispatch_async(dispatch_get_main_queue(), ^{
[self.mytable reloadData];