0

データベースからの書き込みと読み取りを含むプログラムを作成しました。アプリを実行して書き込みを実行しようとすると、次のメソッドを呼び出します。

public static void AddMessage(string callID, string content)
    {
        string select =
            "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime)";
        SqlCommand cmd = new SqlCommand(select, conn);
        cmd.Parameters.AddWithValue("callId", callID.ToString());
        cmd.Parameters.AddWithValue("content", content);
        cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
        try
        {
            conn.Open();
            cmd.ExecuteScalar();
        }
        catch(Exception ex)
        {
            string sDummy = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
    }

メソッド呼び出しの後、テーブルからすべてのレコードを読み取り、フォームに表示します。更新前に挿入されたレコードは表示されましたが、アプリを終了してテーブルを見ると、レコードが表示されません。

誰かがそのような行動を引き起こす可能性があることを知っていますか?

4

3 に答える 3

1

この後、コミットを実行していますか?ステートメントを実行している可能性がありますが、変更をコミットせず、暗黙的なロールバックを実行していません。

例外処理は危険に見えると思います。実際になんらかの方法で処理できない限り、何かを捕まえる意味はありません。フレームワークのトップレベルは、予期しない例外をキャッチして報告するための場所です。

于 2008-10-19T10:38:08.860 に答える
0

ExecuteScalarメソッドの戻り値をintに設定してから、テーブルに対して値をチェックしてみましたか?

ExecuteScalar- _

クエリを実行し、クエリによって返された結果セットの最初の行の最初の列を返します。追加の列または行は無視されます

public static int AddMessage(string callID, string content)
    {
        Int32 newProdID = 0
        string select =
            "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime); SELECT CAST(scope_identity() AS int);";
        SqlCommand cmd = new SqlCommand(select, conn);
        cmd.Parameters.AddWithValue("callId", callID.ToString());
        cmd.Parameters.AddWithValue("content", content);
        cmd.Parameters.AddWithValue("insertTime", "10.10.2008");
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch(Exception ex)
        {
            string sDummy = ex.ToString();
        }
        finally
        {
            conn.Close();
        }
        return (int)newProdID
    }
于 2008-10-19T10:43:04.403 に答える
0

問題を見つけました。自動生成された接続文字列を変更しました

connectionString = "DataSource=。\SQLEXPRESS;AttachDbFilename = | DataDirectory | \ URSZRDB.mdf; Integrated Security = True; User Instance = True"

connectionString = "DataSource=。\SQLEXPRESS;AttachDbFilename = C:\ Users \ Niko \ Documents \ Visual Studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf; Integrated Security = True; User Instance = True"

そして今それは動作します。

私がこの種のプログラムを書くのは初めてではなく、これまでのところすべてがこのようにうまくいっています...

于 2008-10-19T10:43:30.767 に答える