2012-06-07 4 views
0

Итак, я пытаюсь распечатать содержимое таблицы в файле, разделенном запятой.MySQL Кастинг в C#

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) + ","; 

ответ

1

Как сказано в сообщении here, преобразования выполняются драйвером ODBC, и если они не поддерживаются, GetString не преобразует в строку. Поскольку у вас есть столбцы без строки, вы столкнулись с этой проблемой.

Вместо GetString используйте GetValue, а затем преобразовать в строку, используя ToString():

finalstring += reader.GetValue(i).ToString() + ","; 
+1

Именно то, что мне нужно. Благодаря! –

0

вероятно, вы используете GetString(), чтобы получить Int64. Вы должны использовать .GetInt64 вместо этого конкретного значения

вы также должны позвонить IsDBNull, чтобы искать нулевые значения перед вызовом этого метода.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader_methods

0

GetString пытается привести значение столбца строки. Это не будет работать с не-буквенными колонками и вы, очевидно, имеете их в таблице (Pies имеет типа long, Pie_Rent является DateTime) и т.д. Вы должны использовать другой метод извлечения данных, как, например:

finalstring = finalstring + reader[i].ToString() + ",";