質問
データベースの書き込みと読み取りを含むプログラムを作成しました。アプリを実行して書き込みを実行しようとすると、次のメソッドを呼び出します。
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();
}
}
メソッド呼び出しの後、テーブルからすべてのレコードを読み取り、フォームに表示します。更新前に挿入されたレコードは表示されますが、アプリを終了してテーブルを見ると、レコードは表示されません。
このような動作を引き起こす可能性のあることを誰か知っていますか?
解決
この後、コミットを実行していますか?ステートメントを実行しているが、変更をコミットせずに暗黙的なロールバックを実行していない可能性があります。
例外処理は危険だと思います。実際に何らかの方法で処理できない限り、何かをキャッチする意味はありません。フレームワークの最上位は、予期しない例外をキャッチして報告する場所です。
他のヒント
ExecuteScalarメソッドの戻り値をintに設定してから、テーブルに対して値を確認しようとしましたか?
クエリを実行し、クエリによって返された結果セットの最初の行の最初の列を返します。追加の列または行は無視されます
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
}
問題が見つかりました。自動生成された接続文字列を変更しました
connectionString ="データ Source =。\ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ URSZRDB.mdf; Integrated Security = True; User Instance = True"
with
connectionString ="データ Source =。\ SQLEXPRESS; AttachDbFilename = C:\ Users \ Niko \ Documents \ Visual Studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf; Integrated Security = True; User Instance = True"
これで動作します。
この種のプログラムを書いたのは初めてではなく、これまでのところすべてがうまくいった...