我很擅长使用数据库.现在我可以写SELECT,UPDATE,DELETE,和INSERT命令.但我看过很多我们喜欢写的论坛:
SELECT empSalary from employee where salary = @salary
Run Code Online (Sandbox Code Playgroud)
...代替:
SELECT empSalary from employee where salary = txtSalary.Text
Run Code Online (Sandbox Code Playgroud)
为什么我们总是喜欢使用参数以及如何使用它们?
我想知道第一种方法的用途和好处.我甚至听说过SQL注入,但我并不完全理解它.我甚至不知道SQL注入是否与我的问题有关.
我试图使用用户提供的数据创建一个SQL语句.我在C#中使用与此类似的代码:
var sql = "INSERT INTO myTable (myField1, myField2) " +
"VALUES ('" + someVariable + "', '" + someTextBox.Text + "');";
var cmd = new SqlCommand(sql, myDbConnection);
cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
这在VB.NET中:
Dim sql = "INSERT INTO myTable (myField1, myField2) " &
"VALUES ('" & someVariable & "', '" & someTextBox.Text & "');"
Dim cmd As New SqlCommand(sql, myDbConnection)
cmd.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
然而,
O'Brien)时,这会失败,我怎么做"正确的方式"?
我必须为我的OJT公司编写应用程序管理系统.前端将在C#中完成,后端在SQL中完成.
现在我从未做过这个范围的项目; 在学校我们只有关于SQL的基础课.不知怎的,我们的老师完全没有讨论SQL注入,我现在才通过在网上阅读它来接触它.
所以无论如何我的问题是:你如何防止C#中的SQL注入?我隐约认为可以通过正确屏蔽应用程序的文本字段来完成它,以便它只接受指定格式的输入.例如:电子邮件文本框的格式应为"example@examplecompany.tld".这种方法是否足够?或者.NET是否有预定义的方法来处理这样的东西?我可以将过滤器应用于文本框,因此它只接受电子邮件地址格式或名称文本框,因此它不接受特殊字符吗?
下面是我正在尝试将数据插入到我的'ArticlesTBL'表中的代码.我还想将图像文件上传到mt计算机.以前我在Visual Studio中使用我的.aspx文件中的数据控件来插入数据,所以在C#中尝试这样做对我来说是新的.真的很感激任何帮助.谢谢.
我收到错误读取:'UploadedUserFiles'附近的语法不正确.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
public partial class _CopyOfSubmitArticle : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void uploadbutton_Click(object sender, EventArgs e)
{
string UpPath = Server.MapPath("~/UploadedUserFiles");
int imgSize = FileUpload1.PostedFile.ContentLength;
string imgName = FileUpload1.FileName;
string imgPath = "UploadedUserFiles/" + imgName;
if (FileUpload1.PostedFile.ContentLength > 1000000)
{
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Alert", "alert('File is too big')", true);
}
else
{
FileUpload1.SaveAs(Server.MapPath(imgPath));
myinfo.Text …Run Code Online (Sandbox Code Playgroud) 小背景:我是这家公司唯一的程序员.我正在使用预先存在的框架.
也就是说,该公司有一个DLL(Database.dll),其中包含"我需要的所有数据库交互".如,它有Query(),Update(),Insert(),等.现在,我正在写的项目设置为Database.dll参考.我的项目接受零用户输入.与用户输入最接近的是用户可以从中选择日期的下拉框.没有太多的经验,我很好奇我是否还需要担心SQL注入?如果是这样,那么查询会写得像
var query = string.Format("SELECT timestamp FROM table1 WHERE date = \"{0}\"
AND measured_dist = bit_loc AND rop > 0" , Date))
Run Code Online (Sandbox Code Playgroud)
足够作为参数化查询?请记住,所有查询执行都是由Query()我已经告知必须使用的预先存在的,并且无法编辑.
编辑
该程序是一个WinForm应用程序.
我在asp.net中有以下代码:
using (OleDbCommand command = dbConnW.CreateCommand())
{
string CreateTableK = null;
CreateTableK += "Create Table DSKKAR00 (DSK_ID c(10),DSK_KIND N(1),MON_PYM C(3))";
OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, dbConnW);
cmdCreateTable.ExecuteNonQuery();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(WorkRoomNo + ",");
sb.Append("1,");
sb.Append(",");
OleDbCommand cmd3 = new OleDbCommand("Insert into DSKKAR00 (DSK_ID,DSK_KIND,MON_PYM) Values (" + sb.ToString() + ")", dbConnW);
cmd3.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
但是我有以下错误:
语法错误
SQL Server 查询中的 LIKE 运算符对于匹配自定义模式非常有用。然而,有时需要从模式中转义某些字符或子字符串,例如与号“%”、下划线“_”、方括号“[”和“]”等。
事实上,我正在使用参数化查询,但它不能解决 LIKE 情况,因为例如搜索_意味着“任何字符”。
在转义此类模式时必须考虑的字符集是什么?能否提供 C# 函数来执行安全转义?
我在c#中有声明:
String sql = String.Format("UPDATE Table SET FIRST_NAME='{0}',LAST_NAME='{1}',BIRTH_DATE='{2}' where CUSTOMER_NUMBER ='{3}'",FirstName, LastName,DateOfBirth,Number);
Run Code Online (Sandbox Code Playgroud)
如果名字,姓氏等有撇号像O'Hare,O'Callahagan,则上述语句不会执行,因为更新语句的语法错误.
如何在string.format中转义撇号?
我有一个项目,其中包含许多用*.DLLs文件编译的SQL查询.
昨天,我收到了一个新的错误:用单引号自动生成的用户名会导致错误.
原因是像这样的查询:
string.Format("SELECT TimeZone from yaf_User WHERE [Name]='{0}'", UserName);
Run Code Online (Sandbox Code Playgroud)
有人可以建议任何类型的技巧或黑客来解决它?
更新:我不知道为什么开发人员使用这种可怕的方式来生成SQL查询,但是现在我应该修复它.客户端不明白我为什么要重写大量修复代码.
我试图利用以下SQL(在SQL Server 2014中):
declare @maliciousSQL nvarchar(max);
set @maliciousSQL = '???'
exec ('SELECT SUM(quantity) from mytable where id in ' + @maliciousSQL );
Run Code Online (Sandbox Code Playgroud)
如何制作参数@maliciousSQL来运行任意sql?假设任务是执行命令'truncate table othertable' - 它可行吗?
感谢任何人的帮助