c# - 'Bairstow' 附近的语法不正确。我收到存储在 sql server 中的播放器名称错误
问题描述
protected void btn_Save_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox status = row.Cells[1].FindControl("cb_Cap") as CheckBox;
//int Credits = Convert.ToInt32(row.Cells[0].Text);
string Name = Convert.ToString(row.Cells[0].Text);
if (status.Checked)
{
updaterow(Name, "Captain");
}
else
{
updaterow(Name, "None");
}
}
}
private void updaterow(string Name, string markstatus)
{
string mycon = @"Data Source=DESKTOP-7IGRD5V\SQLEXPRESS; Initial Catalog =ULogin; Integrated Security = True";
string updateData = "Update teamf set role='" + markstatus + "' where Name=" + Name;
SqlConnection con = new SqlConnection(mycon);
con.Open();
SqlCommand cmd = new SqlCommand(updateData);
cmd.Connection = con;
cmd.ExecuteNonQuery();
lbl_Cap.Text = "Captain Added";
con.Close();
}
解决方案
这比你知道的还要糟糕。在当前代码中,con.Close();
如果您有异常,该行将不会运行。如果这种情况经常发生,您可以完全在没有连接的情况下运行 Sql Server,并有效地将自己锁定在数据库之外。
更糟糕的是,我可以使用该Name
值在您的服务器上运行任何我想要的任意代码,只需将我的名字以'';
. 想象一下,如果我决定告诉你我的名字是'';Drop Table teamf;
。仔细想想会发生什么。
这应该可以解决这两个问题,并解决您的问题:
private void updaterow(string Name, string markstatus)
{
string mycon = @"Data Source=DESKTOP-7IGRD5V\SQLEXPRESS; Initial Catalog =ULogin; Integrated Security = True";
string updateData = "UPDATE teamf SET role= @Role WHERE Name = @Name";
using (var conn = new SqlConnection(mycon))
using (var cmd = new SqlCommand(updateData, conn))
{
// Use actual column types and lengths from the database here
cmd.Parameters.Add("@Role", SqlDbType.NVarChar, 25).Value = markstatus;
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 25).Value = Name;
con.Open();
cmd.ExecuteNonQuery();
} //using block will guarantee the connection is closed, *even if an exception is thrown*
lbl_Cap.Text = "Captain Added";
}
总是总是 总是使用这样的参数将数据放入查询中!任何更少的事情实际上都是乞求从现在起一年后发现你在六个月前被黑客入侵了。如果应用程序中有任何其他代码使用这样的字符串连接来构建 SQL,那么修复它(因为它真的被破坏了)是工作 #1。
推荐阅读
- google-apps-script - 带有超链接的单元格,用于在 google 表格中使用相邻行数据填充目标表格(脚本)
- video - ffmpeg vaapi 硬件加速,某些视频无法正常工作
- java - 如何从静态类中导入变量
- python - 如何恢复 tensorflow2 中的特定检查点(实现提前停止)?
- azure - Azure WebApp 多容器配置已损坏
- google-apps-script - Google 表格脚本 getNextDataCell() 在使用 FILTER 或 UNIQUE 公式的列中表现不同
- html - 具有溢出省略号的相等但动态大小的列
- php - WordPress 中的高级自定义字段 - 无法在组内使用转发器
- javascript - 获取返回 500(内部服务器错误)JavaScript
- c# - Unity2D moveSpeed Windows和Android的区别