在create table SQL Server命令中引用默认值

时间:2015-03-10 16:02:09

标签: c# sql .net sql-server ado.net

我想编写一个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语句(使用相同的连接)。

1 个答案:

答案 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();