none
提示添加数据成功,但是打开数据库却发现没有数据! RRS feed

  • 问题

  • 最近在学习winform编程,遇到了一个问题,出现如下情况

    做了一个添加数据的操作,点添加的时候,提示添加成功了,而且也可以看到刚添加的数据,但是我打开数据库的时候,却发现表里并没有新插入的数据,我刷新了下表,也没有出现。

    开发环境:vs2010  ms sql 2008 express 

    数据库的创建是在数据库资源管理器-》数据连接-》创建SQL Server 数据库  进行创建的(不知道有没有什么影响)

    库结构:


    id已设置自增

    程序界面:

    添加路线代码:

    private void btnAdd_Click(object sender, EventArgs e)
            {
                int n = 0;
                string sql = "insert into line(lname,lsort,drivername,drivermobile) values(@lname,@lsort,@drivername,@drivermobile)";
                if(txtDriverMobile.Text.Trim() == "" || txtDriverName.Text.Trim()== "" || txtLineName.Text.Trim() == "" || txtLineSort.Text.Trim() == "")
                {
                    MessageBox.Show("信息不完整,请检查");
                    return;
                }
                SqlParameter[] param = {
                                            new SqlParameter("@lname",txtLineName.Text.Trim()),
                                            new SqlParameter("@lsort",txtLineSort.Text.Trim()),
                                            new SqlParameter("@drivername",txtDriverName.Text.Trim()),
                                            new SqlParameter("@drivermobile",txtDriverMobile.Text.Trim())
                                       };
                SqlConnection conn = new SqlConnection(conStr);
                SqlCommand cmd = new SqlCommand(sql,conn);
                conn.Open();
                cmd.Parameters.AddRange(param);
                n = cmd.ExecuteNonQuery();            
                if (n > 0)
                {
                    MessageBox.Show("添加成功");//bug:添加之后,不会保存到库里,但点显示路线是又能显示新添加的记录
                }
                else 
                {
                    MessageBox.Show("添加失败");
                    return;
                }
    	    conn.Close();
                dgvLine.Refresh();//bug:不会即时刷新数据,并显示
    
            }

    显示路线按钮代码:

    private void btnShow_Click(object sender, EventArgs e)
            {            
                string sql = "select * from line";
                SqlConnection conn = new SqlConnection(conStr);
                SqlCommand cmd = new SqlCommand(sql, conn);
                DataTable dt = new DataTable();
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
                dgvLine.DataSource = dt;
            }

    点添加路线,提示添加成功,虽然最后调用了DataGridView.Refresh(),但是不会自动刷新,这时候,我点显示路线的时候,刚添加的数据就可以看到,但是我打开数据库查看的时候,却发现并没有新数据,还是原来,我手动录入的测试数据。并不是通过程序插入的数据,我也点右键,选择刷新,刷新下数据库,也没有看到新数据,很奇怪的问题,

    我做了不止这一个功能,其它功能也是同样的问题,数据添加不到数据库里。

    我在想会不会是数据库权限的问题或者是设置了只读什么的,但是我又找不到在哪里修改!

    求各位大神帮助,在此先行拜谢各位看官!!

    2012年4月25日 3:26

答案

  • 右键test.mdf, 选择属性,设置Copy to Output Directory 为 Copy if newer 试试看。

    有一个相关的帖子:http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/f44bd58e-a26e-4376-a78c-d2c5dda12ba3


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    Rocky Yue  您好

    按照您的方法,设置了下,情况依旧,我打算装下sql 2005 数据库,不装express版的,试下!估计可能是express某个地方没有设置好

    2012年4月26日 3:27
  • 有没有试过把testDataSet 的属性设置为 Copy to Output Directory 为 Copy if newer?


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年4月26日 4:17
    版主
  • 我现在安装了个Microsoft SQL Server Management Studio 2008 R2   这时候,我在调试的时候,插入数据,然后在这里查看,没有问题,能看到新插入的数据,

    但是在vs2010里的服务器资源管理器里查看,依然是没有数据,暂且到这里吧。我先用那个SQL Management 来管理数据库吧。

    如果以后找到原因,我会把相关的原因及办法更新上来,再次感谢楼上几位!

    2012年5月3日 8:09

全部回复

  • 您好,

    请问连线有设定到 SET IMPLICIT_TRANSACTIONS ON ?

    可以试着加入Transaction试看看!

    int n = 0;
    string sql = "insert into line(lname,lsort,drivername,drivermobile) values(@lname,@lsort,@drivername,@drivermobile)";
    if (txtDriverMobile.Text.Trim() == "" || txtDriverName.Text.Trim() == "" || txtLineName.Text.Trim() == "" || txtLineSort.Text.Trim() == "")
    {
    	MessageBox.Show("信息不完整,请检查");
    	return;
    }
    SqlParameter[] param = {
    							new SqlParameter("@lname",txtLineName.Text.Trim()),
    							new SqlParameter("@lsort",txtLineSort.Text.Trim()),
    							new SqlParameter("@drivername",txtDriverName.Text.Trim()),
    							new SqlParameter("@drivermobile",txtDriverMobile.Text.Trim())
    					   };
    SqlConnection conn = new SqlConnection(conStr);
    SqlCommand cmd = new SqlCommand(sql, conn);
    conn.Open();
    // Start a local transaction.
    SqlTransaction sqlTran = conn.BeginTransaction();
    cmd.Transaction = sqlTran;
    
    
    cmd.Parameters.AddRange(param);
    try
    {
    	n = cmd.ExecuteNonQuery();
    	// Commit the transaction.
    	sqlTran.Commit();
    	MessageBox.Show("添加成功");//bug:添加之后,不会保存到库里,但点显示路线是又能显示新添加的记录
    }
    catch
    {
    	// Attempt to roll back the transaction.
    	sqlTran.Rollback();
    	MessageBox.Show("添加失败");
    }
    
    conn.Close();




    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年4月25日 4:46
  • 楼上,你好

    下面是根据您的意见,做了修改,情况依旧,提示成功,但数据库里却没有数据!!

    private void btnAdd_Click(object sender, EventArgs e)
            {
                int n = 0;
                string sql = "insert into line(lname,lsort,drivername,drivermobile) values(@lname,@lsort,@drivername,@drivermobile)";
                if(txtDriverMobile.Text.Trim() == "" || txtDriverName.Text.Trim()== "" || txtLineName.Text.Trim() == "" || txtLineSort.Text.Trim() == "")
                {
                    MessageBox.Show("信息不完整,请检查");
                    return;
                }
                SqlParameter[] param = {
                                            new SqlParameter("@lname",txtLineName.Text.Trim()),
                                            new SqlParameter("@lsort",txtLineSort.Text.Trim()),
                                            new SqlParameter("@drivername",txtDriverName.Text.Trim()),
                                            new SqlParameter("@drivermobile",txtDriverMobile.Text.Trim())
                                       };
                SqlConnection conn = new SqlConnection(conStr);
                SqlCommand cmd = new SqlCommand(sql,conn);
                conn.Open();
    			SqlTransaction sqlTran = conn.BeginTransaction();
    			cmd.Transaction = sqlTran;
    
                cmd.Parameters.AddRange(param);
    			try
    			{
    				n = cmd.ExecuteNonQuery(); 
    				sqlTran.Commit();
    				MessageBox.Show("添加成功");//bug:添加之后,不会保存到库里,但点显示路线是又能显示新添加的记录
    			}
    			catch 
    			{
    				sqlTran.Rollback();
    				MessageBox.Show("添加失败");
    				return;
    			}            
    			conn.Close();
                dgvLine.Refresh();//bug:不会即时刷新数据,并显示
    
            }

    2012年4月25日 6:11
  • 你好,可以给出你的数据库链接字符串吗?谢谢……

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月25日 7:40
    版主
  • 你好,可以给出你的数据库链接字符串吗?谢谢……

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    <add name="str" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\test.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
                providerName="System.Data.SqlClient" />

     

    test.mdf  就是数据库,在根目录下!

    另外,我发现一个问题,在Bin\Debug 目录下,也有个test.mdf 这个不是我创建的,不知道是不是项目的编译的时候,自动复制过去的

    里面有程序的可执行文件,我使用这里面编译好的程序,然后运行,插入数据,然后再打开这里的数据库,却发现里面有数据,

    单单调试的时候,却不行!~  很奇怪

    2012年4月25日 8:08
  • 请把"User Instance=True"这句话去掉。

    仍然不行的话,请直接附加到Server上(使用联机的Server而不是本地附加的数据库)。我以前碰到类似问题,貌似这样解决了。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已建议为答案 呆oO 2012年4月25日 11:23
    2012年4月25日 8:11
    版主
  • 右键test.mdf, 选择属性,设置Copy to Output Directory 为 Copy if newer 试试看。

    有一个相关的帖子:http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/f44bd58e-a26e-4376-a78c-d2c5dda12ba3


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    2012年4月26日 2:45
    版主
  • 右键test.mdf, 选择属性,设置Copy to Output Directory 为 Copy if newer 试试看。

    有一个相关的帖子:http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/f44bd58e-a26e-4376-a78c-d2c5dda12ba3


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us


    Rocky Yue  您好

    按照您的方法,设置了下,情况依旧,我打算装下sql 2005 数据库,不装express版的,试下!估计可能是express某个地方没有设置好

    2012年4月26日 3:27
  • 有没有试过把testDataSet 的属性设置为 Copy to Output Directory 为 Copy if newer?


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us

    2012年4月26日 4:17
    版主
  • 我现在安装了个Microsoft SQL Server Management Studio 2008 R2   这时候,我在调试的时候,插入数据,然后在这里查看,没有问题,能看到新插入的数据,

    但是在vs2010里的服务器资源管理器里查看,依然是没有数据,暂且到这里吧。我先用那个SQL Management 来管理数据库吧。

    如果以后找到原因,我会把相关的原因及办法更新上来,再次感谢楼上几位!

    2012年5月3日 8:09