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

Posted

技术标签:

【中文标题】MySQL 查询中的输入字符串格式不正确【英文标题】:Input string was not in a correct format in MySQL query 【发布时间】:2011-09-06 03:06:45 【问题描述】:

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

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;

它会在我在代码中标记的位置引发错误。任何帮助将不胜感激!

【问题讨论】:

调试看看reader["still_active"]的值是多少 我应该提到 still_active 不是 null 并且是 TINYINT(1) 无论如何不要使用非泛型ArrayList! 我想通了。我把它读成 bool 而不是 int 【参考方案1】:

最好使用TryParse:

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

【讨论】:

如果该值绝对应该是@​​987654323@,则不是。【参考方案2】:

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

reader["still_active"] != DBNull

【讨论】:

【参考方案3】:

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

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

或者更好地使用byte

【讨论】:

我用它替换了它,它给了我以下错误:Specified cast is not valid. @Green:调试它。 reader["still_active"].GetType().ToString()【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

still_active 永远不会为空。这是一个 TINYINT(1)

以上是关于MySQL 查询中的输入字符串格式不正确的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 中的日期格式不正确

MySQL DateTime 的 C# 输入字符串格式不正确

输入字符串的格式不正确

数组中的“System.FormatException:'输入字符串格式不正确”错误

输入字符串在 double.Parse 中的格式不正确

“输入字符串的格式不正确。” WPF 数据网格中的异常