gpt4 book ai didi

c# - 在创建表 SQL Server 命令中引用默认值

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:03 26 4
gpt4 key购买 nike

我想编写一个 C# 方法来创建一个表并添加一个列。该列的默认值作为该方法的参数给出。在 SQL 命令中引用默认值的最安全方法是什么?

代码应该是这样的:

var defaultValueThatOriginatesFromAnEvilSource = "'; DROP TABLE #Entities; SELECT '"; // the argument
database.RawExecute(string.Format("create table #Entities (somecolumn int default {0})", defaultValueThatOriginatesFromAnEvilSource));

是否可以简单地替换参数中的单引号来处理所有类型的注入(inject)?或者我应该为此使用 C# 或 SQL 中的特殊方法吗?

需要注意的一件事是,我创建了一个临时表,我需要下一个 SQL 语句(使用相同的连接)可以访问它。

最佳答案

正如 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();

关于c# - 在创建表 SQL Server 命令中引用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28968450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com