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
- 包含 username
和 password
用于成功执行的登录目的。
- tblEmp
- 包含员工数据,这是我尝试插入数据的数据。
我不明白为什么MessageBox
出现,而实际上没有插入到我的tblEmp
。
编辑:ConnectionString
到 loginDB.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
(以及其他IDisposable
s)使用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 测试函数未定义数组键错误
mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常
mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常