1

私はこのコードを取得しSELECTS SUMUPDATEこの結果をどこかで取得しました。しかし、問題はno results found for SELECT SUM(castka)、それらの条件がある場合です。

Exception for DBNull結果が見つからなかった場合、UPDATE "0"代わりにどのように作成するのか疑問に思っています。私はそれほど長いプログラミングではないので、誰かがこれを解決するのを手伝ってくれますか?

お時間をいただきありがとうございました。

private void btn_zavri_Click(object sender, EventArgs e)
    {
        try
        {

            spojeni.Close();
            SqlCommand sc2 = new SqlCommand("SELECT SUM(castka) AS sumcastka FROM kliplat WHERE akce='" + zakce.Text + "' AND rocnik='" + rocnik + "'", spojeni);
            spojeni.Open();
            int vysledek2 = Convert.ToInt32(sc2.ExecuteScalar());
            SqlCommand sc3 = new SqlCommand("UPDATE zajezd SET s_prijmy=@s_prijmy WHERE akce='" + zakce.Text + "' AND rocnik='" + rocnik + "'", spojeni);
            spojeni.Close();
            sc3.Parameters.AddWithValue("@s_prijmy", vysledek2);
            spojeni.Open();
            sc3.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show("" + ex);
        }
        finally
        {
            spojeni.Close();
            this.Close();
        }
    }
4

4 に答える 4

1

これはあなたが達成したいことですか?

SELECT ISNULL(SUM(castka), 0) AS sumcastka FROM kliplat
于 2013-08-13T09:47:00.633 に答える
1
try
    {

        spojeni.Close();
        SqlCommand sc2 = new SqlCommand("SELECT SUM(castka) AS sumcastka FROM kliplat WHERE akce='" + zakce.Text + "' AND rocnik='" + rocnik + "'", spojeni);
        spojeni.Open();
        object obj = sc2.ExecuteScalar();
        int vysledek2 = obj == null ? 0  : Convert.ToInt32(obj);
        if(obj != null){
          SqlCommand sc3 = new SqlCommand("UPDATE zajezd SET s_prijmy=@s_prijmy WHERE akce='" + zakce.Text + "' AND rocnik='" + rocnik + "'", spojeni);
          spojeni.Close();
          sc3.Parameters.AddWithValue("@s_prijmy", vysledek2);
          spojeni.Open();
          sc3.ExecuteNonQuery();
        }
    }
//....
于 2013-08-13T09:47:22.307 に答える
0

sum 関数を ISNULL でラップし、レコードがない場合は 0 を返します。

SELECT ISNULL(SUM(castka), 0) AS sumcastka
于 2013-08-13T09:51:07.113 に答える
0

これを変える

  int vysledek2 = Convert.ToInt32(sc2.ExecuteScalar());

 object test = sc2.ExecuteScalar();
 if(test != DBNull.Value && test!=null)
 {
     //rest of your code
     int vysledek2 = Convert.ToInt32(test);
 }
于 2013-08-13T09:49:55.340 に答える