0

私はクラスでデータセットを公に宣言しましたこれはコードです

public DataSet GetUsersDataSet()
    {
        SqlConnection con = new SqlConnection(connectionString);
        SqlDataAdapter da = new SqlDataAdapter("SELCT * FROM login", con);
        DataSet ds = new DataSet();
        try
        {
            con.Open(); 
            da.Fill(ds, "login");
            return ds;

        }

        catch 
        { 
            new ApplicationException("Data Error:");

        }
        finally { con.Close(); }


    }

しかし、それは私にエラーを与えます:

WebApplication1.classes.LoginDB.GetUsersDataSet()':すべてのコードパスが値を返すわけではありません。

しかし、私のコードdsが戻ってきたので、その時点でtrycatchを削除してから試しました。誰が間違いを教えてもらえますか?

4

7 に答える 7

1

失敗した場合はどうなりtryますか?ブロックreturn外のステートメントが必要です。try/catch

public DataSet GetUsersDataSet()
{
    SqlConnection con = new SqlConnection(connectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELCT * FROM login", con);
    DataSet ds = new DataSet();

    try
    {
        con.Open(); 
        da.Fill(ds, "login");
    }
    catch 
    { 
        new ApplicationException("Data Error:");
    }
    finally { con.Close(); }

    return ds;
}
于 2013-02-28T10:11:16.633 に答える
0

メソッドの戻り型はですので、ブロックが失敗する可能性があるため、ステートメントDataSetの外でも返す必要があります。失敗した場合、メソッドは値を返しません。そのため、このエラーが発生します。あなたはそれを次のように使うことができます。try/catchtry

public DataSet GetUsersDataSet()
{
    SqlConnection con = new SqlConnection(connectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELCT * FROM login", con);
    DataSet ds = new DataSet();
    try
    {
        con.Open(); 
        da.Fill(ds, "login");

    }

    catch 
    { 
        new ApplicationException("Data Error:");

    }
    finally { con.Close(); }

    return ds;

}
于 2013-02-28T10:11:35.870 に答える
0

例外が発生した場合、catchブロックで何も返さないことを想像してみてください。したがって、trycatchブロックのreturnendを追加します。複数の返品ではなく、単一の返品を使用します。

try
{
   con.Open(); 
    da.Fill(ds, "login");

 }
catch
{
    new ApplicationException("Data Error:");

}
return ds;
于 2013-02-28T10:12:13.680 に答える
0

メソッドはを返す必要がありdatasetます。返されるデータセットはtry-catchステートメントの外部にある必要があります。

public DataSet GetUsersDataSet()
{
    SqlConnection con = new SqlConnection(connectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELCT * FROM login", con);
    DataSet ds = new DataSet();
    try
    {
        con.Open(); 
        da.Fill(ds, "login");


    }

    catch 
    { 
        new ApplicationException("Data Error:");

    }
    finally { con.Close(); }

    return ds;

}
于 2013-02-28T10:16:06.803 に答える
0

メソッドが(例外をスローする場合はfe)を返さない可能性がありますが、それはステートメントのコントラクトです。DataSetda.Fillreturn

を:returnの外側に移動することで確実にできます。try-catch

public DataSet GetUsersDataSet()
{
    DataSet ds = new DataSet();
    // ...
    try{
        // ...
    }
    catch{ 
        //...
    }
    finally{ 
        //...
    }
    return ds;
}

C#の仕様:

8.9.4 returnステートメントは、returnステートメントが表示される関数メンバーの呼び出し元に制御を返します。

//..。

returnステートメントが1つ以上のtryブロックで囲まれ、finallyブロックが関連付けられている場合、制御は最初に最も内側のtryステートメントのfinallyブロックに移されます。コントロールがfinallyブロックのエンドポイントに到達すると、コントロールは次の囲んでいるtryステートメントのfinallyブロックに転送されます。このプロセスは、それを囲むすべてのtryステートメントのfinallyブロックが実行されるまで繰り返されます。

于 2013-02-28T10:16:54.200 に答える
0

キャッチで作成した例外をスローするのを忘れただけです。それはあなたの問題を解決するはずです。

このリンクをチェックしてください

于 2013-02-28T10:17:59.220 に答える
0

私が理解している限り、データベース操作が失敗したときに例外を再スローする必要があります。

public DataSet GetUsersDataSet()
{
    SqlConnection con = new SqlConnection(connectionString);
    SqlDataAdapter da = new SqlDataAdapter("SELCT * FROM login", con);
    DataSet ds = new DataSet();
    try
    {
        con.Open(); 
        da.Fill(ds, "login");
        return ds;

    }
    catch 
    { 
       throw new ApplicationException("Data Error:");

    }
    finally { con.Close(); }
}

したがって、例外がスローされると、ブロックが接続を閉じた後にブロックがtryApplicationExceptionスローされます。finally

私が間違っていて、これがあなたが望むものではない場合。new ApplicationException("Data Error:");ブロック内では何もしませんcatchが、の新しいインスタンスを作成するApplicationExceptionので、それを削除する必要があります。

于 2013-02-28T10:20:51.540 に答える