c# - 通过编程使用时,我的插入命令不会更改数据库

标签 c# mysql .net visual-studio-2010 sql-server-2008

当我使用查询数据库插入值时,使用编码插入时它不会插入,尽管它显示成功。我使用 C# 2010 和 2012 两者都没有添加 我的代码

con.Open();
cmd = new SqlCommand("insert into Main_2(Name,NIC,NA_ID,PS_ID) values('" + name + "','" + nic + "',(SELECT NA_ID FROM NationalAssembly WHERE Name='" + na_name + "'),(SELECT PS_ID FROM ProvisionalAssembly Where Name='" + ps_name + "'))", con);
cmd = new SqlCommand("UPDATE ProvisionalAssembly SET Count=+1 WHERE Name='" + ps_name + "'", con);
cmd = new SqlCommand("UPDATE NationalAssembly SET Count=+1 WHERE Name='" + na_name + "'", con);
cmd.ExecuteNonQuery();

con.Close();

最佳答案

SqlCommand 是一个,也就是说它是一个引用类型

每次您创建一个新的 SqlCommand 对象并将其作为引用分配 cmd 时。这意味着只有最后一个 SqlCommand 会执行。当您使用 ExecuteNonQuery 方法执行时,您的前两个 SqlCommand 在内存中不再有引用。

如果要执行所有这些命令,需要对每个命令单独执行。

请使用parameterized queries .这种字符串连接对于 SQL Injection 是开放的攻击。

也可以使用 using statement处理您的数据库连接。

using(SqlCommand cmd = new SqlCommand(YourInsertStatement))
{
    con.Open();
    cmd.ExecuteNonQuery();

    cmd.CommandText = YourFirstUpdateStatement;
    cmd.ExecuteNonQuery();

    cmd.CommandText = YourSecondUpdateStatement;
    cmd.ExecuteNonQuery();
}

关于c# - 通过编程使用时,我的插入命令不会更改数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345387/

相关文章:

c# - 给定的路径格式不支持 c#

c# - 如何同时以多种方式散列单个文件?

c# - 普遍使用 Int64 而不是 int 的缺点 (C#)

php - 只需要来自 PHP/MySQL 查询的逗号分隔列表

c# - 为什么我不能将泛型类型转换为值类型

mysql - 为什么简单的 If ELSE 语句在 mySql 中不起作用

php - CakePHP 重定向到/users/login

c# - 如何判断一个Windows应用程序是否在屏幕外?

.net - unity3d可以与socket.io一起使用吗?

c# - 引用问题: when are two objects equal?