我写了一个程序,其中包括从数据库中编写和读取。当我运行应用程序并尝试执行写入时,我调用以下方法:
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();
}
}
在方法调用之后,我从表中读取所有记录并在表单中显示它们。可以看到在刷新之前插入的记录,但是当我退出应用程序并查看表格时,我看不到记录。
有谁知道会导致这种行为的原因是什么?
答案 0 :(得分:1)
此后您是否正在执行提交?它可能正在运行您的语句,但之后不提交更改并执行隐式回滚。
我认为异常处理看起来很狡猾。除非你能以某种方式实际处理它,否则没有必要捕获一些东西。框架的顶层是捕获和报告意外异常的地方。
答案 1 :(得分:0)
您是否尝试将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
}
答案 2 :(得分:0)
我发现了问题。我修改了自动生成的连接字符串
的connectionString =“数据 源= \ SQLEXPRESS; AttachDbFilename = | DataDirectory目录| \ URSZRDB.mdf;集成 安全性=真;用户实例=真“
与
的connectionString =“数据 源= \ SQLEXPRESS; AttachDbFilename = C:\用户\尼科\文档\ Visual Studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf;集成 安全性=真;用户实例=真“
现在它有效。
这不是我第一次写这种程序,到目前为止一切都很顺利......