0

私は次の機能を持っています:

public Exception createTopic(Topic t)
{
    query = "insert into [DisData].[dbo].[discussions]([title],[description],[usrid],[dateadded],[desid],[likes],[shares],[visit],[replyto],[sno]) values(@title,@des,@uid,@dateadded,@did,@like,@share,@visit,@replyto,@sno)";
    try
    {
        com = new SqlCommand(query, con);
        com.Parameters.AddWithValue("@title", t.getTitle());
        com.Parameters.AddWithValue("@des", t.getDescription());
        com.Parameters.AddWithValue("@uid", t.getUsrID());
        com.Parameters.AddWithValue("@dateadded", t.getDate());
        com.Parameters.AddWithValue("@did", t.getDesID());
        com.Parameters.AddWithValue("@like", 0);
        com.Parameters.AddWithValue("@share", 0);
        com.Parameters.AddWithValue("@visit", 0);
        com.Parameters.AddWithValue("@replyto", t.getReplyToID());
        com.Parameters.AddWithValue("@sno", getDisCount() + 1);
        con.Open();
        com.ExecuteNonQuery();
        con.Close();
        res.Redirect("viewthread.aspx?id=" + t.getDesID());
        return null;
    }
    catch (Exception e)
    {
        con.Close(); return e;
    }
}

接続文字列は、含まれているクラスのコンストラクターで定義されます。問題は、この関数を実行しようとするたびに、Visual Studio Debugger Console でなくても例外を発生させずに実行され、ユーザーが提供した新しいエントリでデータベースを更新しないことです。ExecuteNonQuery() の戻り値を確認すると、-1 が返されます。私には、コードは問題ないように見えるか、何かが欠けている可能性があります。それを特定するのを手伝ってください。

また、すべての AddWithValue() ステートメントを削除し、クエリを次のように事前定義して、クエリを実行しようとしました

[DisData].[dbo].discussions に挿入します。

しかし、問題は同じままです...

4

2 に答える 2

0

UPDATE、INSERT、および DELETE ステートメントの場合、戻り値はコマンドの影響を受けた行数です。挿入または更新されるテーブルにトリガーが存在する場合、戻り値には、挿入操作または更新操作の両方によって影響を受ける行の数と、トリガーまたはトリガーによって影響を受ける行の数が含まれます。他のすべてのタイプのステートメントの場合、戻り値は -1 です。ロールバックが発生した場合、戻り値も -1 です。

より詳細なリンクを読むMSDN リンク

于 2012-06-18T10:17:16.637 に答える
0

コードのどこかでトランザクションを開始した場合は、Transaction.Commit() メソッドを使用してコミットする必要があります。また、データベース名を含むデータベーステーブルに長い名前を使用していることもわかりますが、これは避けるべきです。データが DisData データベースに挿入されていて、別のデータベースで検索しているかどうかを確認してください...:)

于 2012-06-18T10:04:43.740 に答える