1

こんにちは、タイトルと同じエラーが発生しています。何が悪いのかわかりません。私はまだこれに慣れていないので、これを解決する方法が本当にわかりません。誰かが私を助けることができれば、私はそれを感謝します. ありがとうございました。


public DataTable getAllLoanInfoDT()
{ 
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd2 = new SqlCommand();
        cmd2.Connection = conn;
        // cmd.CommandType = CommandType.StoredProcedure;
        cmd2.CommandText = "SELECT DISTINCT loanUpdateDate FROM LoanPortfolio WHERE (custID LIKE 'OH00002') AND (loanType LIKE 'Personal Loan')"; 
        cmd2.Parameters.AddWithValue("@custID", "OH00002");
        cmd2.Parameters.AddWithValue("@loanType", "Personal Loan");
        conn.Open();
        SqlDataReader myReader = cmd2.ExecuteReader();
        DateTime loanUpdateDate = Convert.ToDateTime(myReader);
        DateTime currDateTime = DateTime.Now;

        int loanToBeAdded = (((currDateTime.Year - loanUpdateDate.Year) * 12) + currDateTime.Month - loanUpdateDate.Month) * 500;
        if (loanToBeAdded > 0)
        {
            String sql = "UPDATE LoanPortfolio SET loanPaid = loanPaid + " + loanToBeAdded.ToString() + ", loanUpdateDate = " + DateTime.Now.ToString();
            sql += " WHERE (loanType LIKE 'Personal Loan') AND (custID LIKE 'OH00002')";

            //Execute the above query here
        }
        conn.Close();

        using (SqlDataAdapter dAd = new SqlDataAdapter("SELECT * FROM LoanPortfolio where custID like 'OH00002'", conn))
        {
            DataTable dTable = new DataTable();
            dAd.Fill(dTable);
            return dTable;
        }
    }
}
4

2 に答える 2

4

ASqlDataReaderはデータの読み取りに使用されます。それを Convert.ToDateTime に渡すだけで、最善を尽くすことはできません。

最初に呼び出しmyReader.Read()て、それが true を返すことを確認します (つまり、データの行があります)。

Convert.ToDateTime(myReader[0])次に、データ リーダーから最初のフィールドを取得し、それを日付に変換するために呼び出します。

于 2013-07-29T15:48:18.843 に答える
2

それはまさにエラーが言うことです。SqlDataReader を DateTime に変換することはできません。単一の値のみを照会する場合は、次を使用する必要があります。

cmd2.ExecuteScalar();

単一の値を取得する場合はTOP 1、クエリでも使用することをお勧めします。

SELECT TOP 1 DISTINCT loanUpdateDate 

また、値が見つからない場合にExecuteScalar()返される可能性がDbNull.Valueあるため、値を何かに変換する前に必ず null チェックを行うようにしてください。

于 2013-07-29T15:47:52.993 に答える