SQL 命令 INSERT 正在工作,但数据未出现在表中

Posted

技术标签:

【中文标题】SQL 命令 INSERT 正在工作,但数据未出现在表中【英文标题】:SQL command INSERT is working but the data not appear in table 【发布时间】:2015-10-14 19:07:38 【问题描述】:

我正在使用 MS VS 2010 Express Edition 在我的 Visual C#.NET 中像这样执行 SQL 命令 INSERT

private void btnAdd_Click(object sender, EventArgs e)

     SqlConnection con = new SqlConnection(Properties.Settings.Default.loginDBConnectionString);
     con.Open();
     SqlCommand cmd = new SqlCommand("INSERT INTO tblEmp (ID, firstname, lastname, email, position) VALUES ('"+textBox1.Text+"','"+textBox2.Text+"', '"+textBox3.Text+"', '"+textBox4.Text+"', '"+comboBox1.Text+"')", con);
     cmd.ExecuteNonQuery();
     con.Close();
     MessageBox.Show("Data Added!");

执行时出现MessageBox,表示执行成功。但是,当我检查表格时,我之前尝试插入的数据根本没有出现。

我有一个数据库 (loginDB.mdf),里面有 2 个表: - TblLogin - 包含 usernamepassword 用于成功执行的登录目的。 - tblEmp - 包含员工数据,这是我尝试插入数据的数据。

我不明白为什么MessageBox 出现,而​​实际上没有插入到我的tblEmp

编辑ConnectionStringloginDB.mdf

Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\Andreas\documents\visual studio 2010\Projects\LoginApplication\LoginApplication\loginDB.mdf";Integrated Security=True;User Instance=True

数据库名称是loginDB.mdf,而不是之前写的logindatabase.mdf。我把它改成loginDB.mdf只是为了测试它,但仍然没有出现任何变化。

【问题讨论】:

请也出示您的 ConnectionString。 ID 是在插入时自动生成其值的标识列吗?始终使用参数化查询而不是字符串连接来构建您的 sql 查询。否则 ypou 很容易受到 sql 注入。 除此之外要做的第一件事是:停止这样构建 SQL。使用参数化 SQL 避免 SQL 注入攻击,避免转换问题,让你的代码更具可读性。 您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。您是否曾经检查过 ExecuteNonQuery 方法的返回值?是否准确返回1?你的变量是什么?您是否曾经在数据库管理器中尝试过查询? 您还应该为SqlConnection(以及其他IDisposables)使用using构造。 【参考方案1】:

如果您的 c# 代码执行时没有任何异常,它也会更新数据库。您可能在您的ConnectionString 中使用了AttachDbFilename=|DataDirectory|\yourDB.mdf,这意味着更新的数据库位于您项目的子文件夹BIN\DEBUG 文件夹中。如果您想查看更新的数据,只需附加位于 ssms 中 bin/debug 文件夹中的数据库即可。 有关更多详细信息,请阅读this 帖子。 还要确保服务器资源管理器中的表尚未打开,如果它已经打开,则必须刷新它以显示更新的数据。请注意:如 cmets 中所述,您应该始终使用参数化查询以避免Sql Injection.

【讨论】:

更新:确实如你所说,我是在Bin\Debug版本中添加数据库,经过测试,出现了。它只出现了1条数据,就像数据库只写入最新插入的数据并丢弃以前的数据,所以我添加了多少次数据,它只会显示数据库中的1行数据。怎么改? 如果您将数据库作为文件包含在项目中,尝试将数据库的Copy To Output Directory 属性设置为Copy if newer 可能会对您有所帮助。如果对您有帮助,请将我的回答标记为“已接受”。另外,如果您需要更多帮助,请告诉我。meta.stackexchange.com/questions/5234/… 是的,我终于把所有的事情都做好了。谢谢!

以上是关于SQL 命令 INSERT 正在工作,但数据未出现在表中的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO SQL INSERT INTO 的 PHPunit 测试函数未定义数组键错误

我尝试在 C# 中运行 sql 命令但出现错误

mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常

mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常

oracledelete关联删除sql命令未正确结束

两个子查询单独工作正常但“SQL 命令未正确结束”当加入时除了 [解释说我是五岁]