在C#中读取MySQL Int(10)值不起作用

时间:2011-02-26 11:23:26

标签: c# mysql

我正在尝试从C#WinForms程序连接到mysql。一切似乎工作正常,我得到99%的列值只是一个int列不想返回正确的值:

   public static void getFromMySqlAndInsertIntoSql() {

        const string preparedCommand = @"
                    select *

                    from agreements";


        using (var varConnection = Locale.sqlConnectOneTimeMySql(Locale.sqlDataConnectionDetailsMySQL))
        using (var sqlQuery = new MySqlCommand(preparedCommand, varConnection)) {
            using (var sqlQueryResult = sqlQuery.ExecuteReader())                 
                    while (sqlQueryResult.Read()) {
                        int agr_id = sqlQueryResult["agr_id"] is int ? (int)sqlQueryResult["agr_id"] : int.MinValue;
                        string agr_idTest = sqlQueryResult["agr_id"].ToString();
                        string agr_fname = sqlQueryResult["agr_fname"].ToString();
                        int agr_stocks_count = sqlQueryResult["agr_stocks_count"] is int ? (int)sqlQueryResult["agr_stocks_count"] : int.MinValue;
                        MessageBox.Show(agr_id.ToString(), agr_idTest);
                    }
             }
        }
}

agr_id总是返回int.MinValue,但是agr_idTest它返回正确的字符串。 int的{​​{1}}值正确返回int,因此它似乎不是代码的问题。

我可以在第一个int列和另一个列之间的MySQL表中找到的唯一区别是:

agr_stocks_count

有没有人有解释?

3 个答案:

答案 0 :(得分:2)

数据库上的

int(10)不映射到C#中的int。而不是使用is int,尝试使用System.Convert。 即使用:

int agr_id = System.Convert.ToInt32(sqlQueryResult["agr_id"]);

答案 1 :(得分:1)

嗯,我认为对于大整数,它可以扭曲C#中的最大int值并转到一些负值,因为unsigned int的最大值比普通int的最大值大两倍。尝试使用long而不是int。

答案 2 :(得分:-1)

int index = sqlQueryResult.GetOrdinal("agr_id");
if (!sqlQueryResult.IsDbNull(index))
agr_id = sqlQueryResult.GetInt32(index);
else
agr_id = int.MinValue();