当我运行一个C#参数化查询来处理单引号时,它仍然会在单引号上抛出一个异常错误。我怎样才能做到这一点?
这是我的密码。。。对于没有单引号的输入数据,它工作得很好,但当我输入单引号并试图发布时,它崩溃了。我已经尝试了许多代码示例,这应该是可行的。任何帮助都将不胜感激当我运行一个C#参数化查询来处理单引号时,它仍然会在单引号上抛出一个异常错误。我怎样才能做到这一点?,c#,sql-server,parameterized,C#,Sql Server,Parameterized,这是我的密码。。。对于没有单引号的输入数据,它工作得很好,但当我输入单引号并试图发布时,它崩溃了。我已经尝试了许多代码示例,这应该是可行的。任何帮助都将不胜感激 string SQLcommand = "UPDATE FirearmTracking SET LastName='" + @custData[2] + // lastName "', CitationNum='" + custData[1] + // citation "', FirstName='" + custData[3] +
string SQLcommand = "UPDATE FirearmTracking SET LastName='"
+ @custData[2] + // lastName
"', CitationNum='" + custData[1] + // citation
"', FirstName='" + custData[3] + // firstname
"', MiddleInitial='" + custData[4] + // mi
"' WHERE EventNum = '" + @custData[0] + // eventNum
"' ";
// Create a new table
DataTable FirearmTracking = new DataTable();
// Grab the Connection String
SqlConnection conn = Connections.GetDataFromDB();
// Create a SqlCommand object
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = SQLcommand;
cmd.Parameters.AddWithValue("@LastName", custData[2]);
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{
throw new Exception("Data Layer - Customer Error...");
}
finally
{
conn.Close();
}
return null;
你有这个问题,因为你需要通过加倍来避免单报价 请参阅此线程:
但无论如何,直接从用户输入执行查询、使用参数或存储过程是一种不好的做法。您正在设置一个参数,但查询没有使用它 在查询中输入参数名称,而不是在值中串联:
string SQLcommand =
"UPDATE FirearmTracking SET " +
"LastName = @LastName, " +
"CitationNum = @CitationNum, " +
"FirstName = @FirstName, " +
"MiddleInitial = @MiddleInitial " +
"WHERE EventNum = @EventNum";
现在为它们添加参数:
cmd.Parameters.AddWithValue("@LastName", custData[2]);
cmd.Parameters.AddWithValue("@CitationNum", custData[1]);
cmd.Parameters.AddWithValue("@FirstName", custData[3]);
cmd.Parameters.AddWithValue("@MiddleInitial", custData[4]);
cmd.Parameters.AddWithValue("@EventNum", custData[0]);
仅使用参数。不是字符串连接。要么使用参数,要么将其转换为存储过程。它的当前状态非常混乱,并且易于SQL注入。因此,这不是一个“C#参数化查询”。它可能是一个“SQL Server参数化查询”,但查询本身与C#无关。用任何语言来说,你这样做都是个坏主意。就是这样!非常感谢。我看到的所有其他示例都是在Update命令的值字段前面放置@。。。今天我花了大约六个小时在这上面,我觉得我快疯了。再次感谢你。感谢你的快速回复,很高兴知道