C# 中的 MySQL 强制转换
本文关键字:转换 MySQL 中的 | 更新日期: 2023-09-27 18:36:33
好的,所以我正在尝试以逗号分隔的文件中打印出表格的内容。
using (OdbcCommand com = new OdbcCommand("SELECT * FROM pie_data WHERE Pie_ID = ?", con)) {
com.Parameters.AddWithValue("", Request.Form["pie_id"]);
com.ExecuteNonQuery();
using (OdbcDataReader reader = com.ExecuteReader()) {
string finalstring = "";
while (reader.Read()) {
finalstring = reader.GetString(9) + ",";
for (int i = 0; i <= 8; i = i + 1) {
finalstring = finalstring + reader.GetString(i) + ",";
}
}
}
Response.Write(finalstring);
noredirect = 1;
}
我的表格布局是:
CREATE TABLE `rent_data` (
`Pies` INT(10) UNSIGNED NOT NULL,
`Name` VARCHAR(85) NOT NULL,
`Email` VARCHAR(85) NOT NULL,
`Pie_Rent` DATE NOT NULL,
`Rent_To` DATE NOT NULL,
`Returned_Date` DATE NULL DEFAULT NULL,
`Place` VARCHAR(100) NOT NULL,
`Purpose` MEDIUMTEXT NOT NULL,
`Comments` MEDIUMTEXT NULL,
`Pie_ID` SMALLINT(5) UNSIGNED ZEROFILL NOT NULL,
INDEX `Pie_ID` (`Equipment_ID`)
)
我得到的错误是这样的:
Exception Details: System.InvalidCastException: Unable to cast object of type 'System.Int64' to type 'System.String'.
在线上:
finalstring = finalstring + reader.GetString(i) + ",";
正如这里所说,转换由 ODBC 驱动程序完成,如果不支持,GetString 不会转换为字符串。由于您有非字符串列,因此您面临此问题。
使用GetValue代替 GetString,然后使用 ToString() 转换为字符串:
finalstring += reader.GetValue(i).ToString() + ",";
您可能正在使用GetString()
来获取Int64。您应该改用.GetInt64
来表示该特定值
在调用此方法之前,还应调用 IsDBNull
以查找 null 值。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader_methods
>GetString
尝试将列值转换为字符串。这不适用于非文字列,并且您显然将它们放在表中(Pies
类型为 long
,Pie_Rent
是DateTime
)等。您必须使用其他方法来提取数据,例如:
finalstring = finalstring + reader[i].ToString() + ",";