在 SQL 表中使用 C# 更新值
Posted
技术标签:
【中文标题】在 SQL 表中使用 C# 更新值【英文标题】:Updating Values with C# in SQL Table 【发布时间】:2015-03-18 16:50:01 【问题描述】:我想知道更新按钮是否可以保存在表格中所做的更改。我写了这段代码,但我不知道它是如何工作的
这是我为更新按钮编写的代码:
string conString = "Data Source=MIRANDA-PC;Initial Catalog=Futebol do Rosa;Integrated Security=True";
SqlConnection con = new SqlConnection(conString);
string selectSql = "Update Players$ set Player Name='" + dataGridView2.Text + "";
SqlCommand cmd = new SqlCommand(selectSql, con);
con.Open();
这是我要更新值的表:
【问题讨论】:
【参考方案1】:好吧,您只需要使用ExecuteNonQuery
执行查询。
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
还可以使用using
statement 来处理您的SqlConnection
和SqlCommand
。
如果您的表或列名称超过一个单词,则需要将它们与[]
一起使用为[Player Name]
。老实说,使用$
登录表名有点奇怪。
using(SqlConnection con = new SqlConnection(conString))
using(SqlCommand cmd = con.CreateCommand())
cmd.CommandText = "Update Players$ set [Player Name] = @name";
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 16).Value = dataGridView2.Text;
con.Open();
cmd.ExecuteNonQuery();
【讨论】:
【参考方案2】:您必须使用 db 对象执行 SQL 查询。
dbinstance.ExecuteSqlCommand(string sqlcommand, object[] params);
此方法适用于 DDL 和 DML。 您也可以使用 ExecuteNonQuery 方法。
【讨论】:
【参考方案3】: cmd.CommandText = "Update Players$ set [Player Name] = @Playername";
cmd.Parameters.Add("@Playername", SqlDbType.NVarChar, 16).Value = dataGridView2.Text;
con.Open();
cmd.ExecuteNonQuery();
【讨论】:
【参考方案4】:将您的 DAL(数据访问层)转换为基于实体框架的最佳解决方案(如果可能),而不是编写您自己的 SQL 查询。这是安全的设计,永远不会受到任何形式的 SQL 注入的攻击。 这是一些样机代码:
using (AppEntities currDb = new AppEntities)
Players PlayerToEdit =
from player in currDb.Players
where player.PlayerID == lngPlayerID
select player.First();
PlayerToEdit.PlayerName = dataGridView2.Text;
currDb.SaveChanges();
您可以在这里阅读更多内容: https://msdn.microsoft.com/en-us/data/ef.aspx
【讨论】:
以上是关于在 SQL 表中使用 C# 更新值的主要内容,如果未能解决你的问题,请参考以下文章
由于使用自动增量添加到表中,如何使用更新的数据刷新 C# DataTable?
将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们