我想编写一个C#方法来创建一个表并添加一列。列的默认值作为方法的参数给出。在SQL命令中引用默认值的最安全的方法是什么?
代码将是这样的:
var defaultValueThatOriginatesFromAnEvilSource = "'; DROP TABLE #Entities; SELECT '"; // the argument
database.RawExecute(string.Format("create table #Entities (somecolumn int default {0})", defaultValueThatOriginatesFromAnEvilSource));
在参数中简单替换单引号是否可以处理所有类型的注入?或者在C#或SQL中是否应该使用特殊方法?
需要注意的一点是,我创建了一个临时表,我需要可以访问下一个SQL语句(使用相同的连接)。
答案 0 :(得分:0)
正如shA.t所说,你可以通过C#中的sqlcommand来做到这一点虽然如果你有多个列,这是非常辛苦的
但是这里有如何使用SQL中的存储过程和C#中的sqlcommand
SQL中的
CREATE PROCEDURE sp_CreateTable
@TableName VARCHAR(50),
@ColumnName VARCHAR(50)
AS
BEGIN
DECLARE @SQLCreate VARCHAR(MAX)
SET @SQLCreate ='CREATE TABLE ' + @TableName
+ '('+@ColumnName+')'
EXEC (@SQLCreate)
END
GO
<小时/> 并在C#
使用指令
添加此内容using System.Data;
using System.Data.Client;
SqlConnection con = new SqlConnection("your connection string here");
con.Open();
SqlCommand cmd = new SqlCommand("sp_CreateTable");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = "someName";
cmd.Parameters.Add("@ColumnName", SqlDbType.VarChar).Value = "someColumnName";
cmd.ExecuteNonQuery();
con.Close();