0

さて、テーブルの内容をコンマ区切りファイルに出力しようとしています。

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

3 に答える 3

1

ここに記載されているように、変換はODBCドライバーによって行われ、サポートされていない場合、GetStringは文字列に変換されません。文字列以外の列があるため、この問題に直面しています。

GetStringの代わりに、GetValueを使用してから、ToString()を使用して文字列に変換します。

finalstring += reader.GetValue(i).ToString() + ",";
于 2012-06-07T16:43:26.247 に答える
0

GetString列の値を文字列にキャストしようとします。これは非リテラル列では機能せず、テーブルにそれらが含まれているようです(PiesタイプはlongPie_RentですDateTime)など。たとえば、次のようなデータを抽出する他の方法を使用する必要があります。

  finalstring = finalstring + reader[i].ToString() + ",";
于 2012-06-07T16:43:11.340 に答える
0

おそらくGetString()、Int64 を取得するために使用しています。.GetInt64その特定の値の代わりに使用する必要があります

IsDBNullこのメソッドを呼び出す前に、null 値を探すためにも呼び出す必要があります。

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

于 2012-06-07T16:41:38.467 に答える