我正在尝试从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
有没有人有解释?
答案 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();