C# SQL命令INSERT正在工作,但数据未显示在表中
我正在使用MS VS 2010 Express Edition在我的Visual C#NET中执行SQL命令C# SQL命令INSERT正在工作,但数据未显示在表中,c#,sql-server,insert,ado.net,sql-server-express,C#,Sql Server,Insert,Ado.net,Sql Server Express,我正在使用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 cm
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!");
}
执行此操作时,会显示消息框
,这意味着执行成功。但是,当我检查表时,我之前尝试插入的数据根本没有出现
我有一个数据库(loginDB.mdf
),里面有两个表:
-TblLogin
-包含用于登录的用户名
和密码
,已成功执行。
-tblEmp
-包含员工数据,这是我试图插入数据的数据
我不明白的是,为什么在我的tblEmp
中没有插入任何消息时,会出现MessageBox
编辑:连接字符串
到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
,而不是前面编写的logindabase.mdf
。我将其更改为loginDB.mdf
只是为了测试它,但仍然没有出现任何更改。如果您的c#代码执行时没有任何异常,它也会更新数据库。您可能在ConnectionString
中使用了AttachDbFilename=|DataDirectory |\yourDB.mdf
,这意味着更新的数据库位于项目的子文件夹BIN\DEBUG
文件夹中。如果您想查看更新的数据,只需附加位于ssms中bin/debug
文件夹中的数据库即可。
欲知更多详情,请阅读帖子。
还要确保服务器资源管理器中的表尚未打开,如果它已打开,则必须刷新它以显示更新的数据。请注意:如评论中所述,您应该始终使用参数化查询来避免如果您的c#代码执行时没有任何异常,它也会更新数据库。您可能在ConnectionString
中使用了AttachDbFilename=|DataDirectory |\yourDB.mdf
,这意味着更新的数据库位于项目的子文件夹BIN\DEBUG
文件夹中。如果您想查看更新的数据,只需附加位于ssms中bin/debug
文件夹中的数据库即可。
欲知更多详情,请阅读帖子。
还要确保服务器资源管理器中的表尚未打开,如果它已打开,则必须刷新它以显示更新的数据。请注意:如评论中所述,您应该始终使用参数化查询,以避免出现问题。请同时显示您的连接字符串。
ID
是插入时自动生成其值的标识列吗?始终使用参数化查询而不是字符串连接来构建sql查询。否则,您就容易受到sql注入的攻击。除了其他事情之外,首先要做的是:停止像那样构建sql。使用参数化SQL可避免SQL注入攻击,避免转换问题,并使代码更具可读性。应始终使用。这种类型的字符串连接对攻击是开放的。您是否曾经将检查作为ExecuteNonQuery
方法的返回值?它是否准确返回1
?你的变量是什么?您是否先在数据库管理器中尝试过查询?您还应该为SqlConnection
(以及其他IDisposable
s)使用using
构造。请也显示您的连接字符串。ID
是插入时自动生成其值的标识列吗?始终使用参数化查询而不是字符串连接来构建sql查询。否则,您就容易受到sql注入的攻击。除了其他事情之外,首先要做的是:停止像那样构建sql。使用参数化SQL可避免SQL注入攻击,避免转换问题,并使代码更具可读性。应始终使用。这种类型的字符串连接对攻击是开放的。您是否曾经将检查作为ExecuteNonQuery
方法的返回值?它是否准确返回1
?你的变量是什么?你有没有先在数据库管理器中尝试过你的查询?你也应该为SqlConnection
(以及其他IDisposable
s)使用using
构造。更新:这确实像你说的,我正在Bin\Debug版本中添加数据库,测试后,它出现了。它只显示1个数据,就像数据库只写入最新插入的数据,并丢弃前一个数据一样,因此我添加数据多少次,它只会显示数据库中的1行数据。如何更改?如果您将数据库作为文件包含在项目中,请尝试将数据库的属性设置为“复制到输出目录”。如果我的回答对您有帮助,请将其标记为“已接受”。如果你需要更多的帮助,请告诉我。是的,我终于设法把所有的事情都做好了。非常感谢。更新:这确实和你说的一样,我正在Bin\Debug版本中添加数据库,测试后,它出现了。它只显示1个数据,就像数据库只写入最新插入的数据,并丢弃前一个数据一样,因此我添加数据多少次,它只会显示数据库中的1行数据。如何更改?如果您将数据库作为文件包含在项目中,请尝试将数据库的属性设置为“复制到输出目录”。如果我的回答对您有帮助,请将其标记为“已接受”。如果你需要更多的帮助,请告诉我。是的,我终于设法把所有的事情都做好了。非常感谢。