MySQL查询中的输入字符串格式不正确

时间:2011-06-01 09:15:13

标签: c# .net mysql ado.net exception-handling

在我的代码中,我连续多次调用数据库。但是,当我尝试从数据库中读取整数值时,我收到以下错误:输入字符串格式不正确。这是我的代码:

private int getNumberOfProjectsAssigned()
{
    ArrayList staffProjects = new ArrayList();
    int numberOfProjects = 0;
    try
    {
        string strConnection = ConfigurationSettings.AppSettings["ConnectionString"];
        MySqlConnection connection = new MySqlConnection(strConnection);
        MySqlCommand command = connection.CreateCommand();
        command.CommandText = "SELECT id_project_pk FROM `test`.`staff_on_project` WHERE id_staff_pk = " + Convert.ToInt32(Session["CurrentUserID"]);
        //SELECT idusers, first_name, last_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1;
        connection.Open();

        MySqlDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            int projectId = Convert.ToInt32(reader["id_project_pk"].ToString());
            staffProjects.Add(projectId);
        }
        connection.Close();
        foreach (int i in staffProjects)
        {
            command.CommandText = "SELECT still_active FROM `test`.`projects` WHERE idprojects = " + i;
            //SELECT idusers, first_name, last_name, job_title, code_quality, time_bonus,analysis_of_requirements FROM `test`.`users` WHERE security_level > 1;
            connection.Open();

            reader = command.ExecuteReader();

            while (reader.Read())
            {
                int projectId = Convert.ToInt32(reader["still_active"].ToString()); // Error Occurs Here
                if(projectId == 1)
                {
                    projectsStaffWorksOn.Add(projectId);
                }
                numberOfProjects = projectsStaffWorksOn.Count;
            }
            connection.Close();
        }            
    }
    catch { }
    return numberOfProjects;
}

它会在我在代码中标记的点处抛出错误。任何帮助将不胜感激!

6 个答案:

答案 0 :(得分:0)

still_active的其中一个值不是有效整数 - 可能是空字符串?

答案 1 :(得分:0)

为简单起见,我要做的就是在执行命令之前,确保已显示命令文本以确保它读取您的预期。

另外,请注意,如果某些内容为NULL,代码中会发生什么?

答案 2 :(得分:0)

如果您正在读取的列值为null或DBNull或空白或者不是正确的整数值,则会发生这种情况。

答案 3 :(得分:0)

如果still_active始终为TINYINT(1),则使用next:

int projectId = (int)reader["still_active"];

或更好地使用byte

答案 4 :(得分:0)

在转换之前考虑检查字段的值,因为它似乎可能是Null字段

reader["still_active"] != DBNull

答案 5 :(得分:0)

最好使用TryParse

int projectId =0;
Int32.TryParse(Convert.ToInt32(reader["still_active"].ToString(),out projectId);