0

データベースでこのコマンドを実行すると、result=null を受け取ることがあります。「else」の部分に入りたいのですが、いつこれが起こっているのですか?

タイプ 'System.FormatException' の未処理の例外が mscorlib.dll で発生しました。追加情報: 入力文字列の形式が正しくありませんでした。

DB database = new DB();
            int reservedSeats = 0;
            using (database.sqlConnection)
            {
                database.sqlConnection.Open();
                string command = "select SUM(nrLocuri) as result from Rezervari where idRand = @idRand and idShow=@idShow";
                using (SqlCommand cmd = new SqlCommand(command, database.sqlConnection))
                {
                    cmd.Parameters.Add("@idRand", SqlDbType.Int).Value = idRand;
                    cmd.Parameters.Add("@idShow", SqlDbType.Int).Value = idShow;
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                            if (dr["result"].ToString() != null)
                                reservedSeats = Convert.ToInt32(dr["result"].ToString());
                            else
                                return totalSeats;
                    }
                }
            }
            return totalSeats-reservedSeats; 
4

4 に答える 4

6

それ以外の:

if (dr["result"].ToString() != null)

行う:

if (dr["result"] != DbNull.Value)

dr["result"]がデータベースを返すときnull、その値はDbNull.Value- この値を呼び出そうとするとConvert.ToInt32、フォーマット例外が発生します。

于 2012-05-13T08:34:47.133 に答える
2

試す:

if(!dr.IsDBNull(i)){   //replace i with the column id

  //get the data

}
于 2012-05-13T08:38:59.370 に答える
1

SUM()レコードが見つからなかった場合に戻りたい場合は、次0.00のように置き換えます。

COALESCE(SUM(...), 0.00)

COALESCE は、最初に渡された null 以外の値を返します。

于 2012-05-13T08:35:44.603 に答える
1

試してくださいisnull

string command = "select isnull(SUM(nrLocuri),0.00 )as result from Rezervari where idRand = @idRand and idShow=@idShow";
于 2012-05-13T08:38:46.120 に答える