【问题标题】:Query not saving to database查询不保存到数据库
【发布时间】:2014-10-17 09:59:17
【问题描述】:

我正在尝试通过用户输入将注释保存到数据库中,但我的代码没有将其保存到数据库中。

我打算用函数检查用户输入。

SqlConnection con = database.GetConnection();
SqlCommand command = new SqlCommand("INSERT INTO notities (notities_gebruiker, notities_datum, notities_doeldatum, notities_bericht) values(@notities_gebruiker, @notities_datum, @notities_doeldatum, @notities_bericht)", con);
command.Parameters.AddWithValue("@notities_gebruiker", this.gebruikerid.ToString());
command.Parameters.AddWithValue("@notities_datum", DateTime.Now);
command.Parameters.AddWithValue("@notities_doeldatum", DateTime.ParseExact(this.targetDate.Text, "dd/MM/yyyy", null));
command.Parameters.AddWithValue("@notities_bericht", this.Note.Text);
con.Open();
command.ExecuteNonQuery();
con.Close();
initialiseListBox();   

发生的情况是,每当我关闭我的应用程序时,数据库都会丢失它保存的值并返回到原始状态。不过我可以手动添加项目..

编辑:它回滚我通过应用程序添加的行,但如果我保持运行,我可以从我保存的数据库中提取数据。

【问题讨论】:

  • 仅凭该信息很难说问题出在哪里...您没有收到任何错误消息吗?因为我在这里看到的代码看起来不错
  • 我一无所获
  • 听起来您每次构建都在重新创建数据库...检查是否是这种情况,因为您显示的代码没有问题。
  • 这可能是一个愚蠢的问题,但您确定您正在寻找正确的数据库吗? “每当我关闭我的应用程序时,数据库就会恢复到以前的状态”是什么意思?您的意思是您可以在某些时候看到添加的记录,但随后会发生回滚?
  • 他的意思是他从未阅读过文档,并且不知道每次调试启动时都会将 localdb 中的 templacte 数据库再次复制到输出中,所以他重新开始。他还说他没有使用帮助,因为这个问题一遍又一遍地出现。

标签: c# localdb


【解决方案1】:

您忘记提交刚刚插入的数据。使用 SqlTransaction 类开始事务:

SqlTransaction myTransaction = con.BeginTransaction();
command.ExecuteNonQuery();
myTransaction.Commit();

最好使用 Using 语句来确保在代码块完成后处理您的连接、命令和事务,而不是手动调用 Close() 方法:

Using (SqlConnection con = database.GetConnection())
   {
     con.Open();

     Using (SqlCommand command = new SqlCommand("sqlhere"))
       {

         Using (SqlTransaction myTransaction = con.BeginTransaction())
             {
               //your code here
             }

       }
   }  

SqlTransaction 类:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction(v=vs.110).aspx

关于使用语句的简洁文章:

http://www.codeproject.com/Articles/6564/Understanding-the-using-statement-in-C

【讨论】:

  • 但是即使你不使用transactioncommit,只要使用OP的问题,它应该可以工作!
  • OP 的数据库必须关闭隐式提交。查看此帖子:stackoverflow.com/questions/1090240/…
【解决方案2】:

在您的 bin/debug 文件夹中查找包含数据的数据库副本。

避免这种情况的最佳方法是在连接字符串中使用完整路径并避免 |DataDirectory|调试时

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2013-12-31
    相关资源
    最近更新 更多