繁体   English   中英

如何在C#中的SQL语句中构建参数化查询或用户转义?

[英]How to build a parameterized query or user escaping in this SQL statement in C#?

command.CommandText = String.Format("CREATE LOGIN {0} WITH password='{1}'", loginName, password);

loginName和password基于某些用户输入

我意识到这样做是不好的做法但是如何避免在这里进行sql注入?

调用sp_addlogin - 它已经参数化了

以下是如何参数化SQL。 您可能还想查看有关编写处理此类事物的DAO的这篇文章 我不确定你是否可以参数化LoginName。 你可能最喜欢调用sp_addlogin,就像上一张海报所说的那样。

       command.CommandText=  @"CREATE LOGIN @LoginName WITH password=@Password";
        command.CommandType = CommandType.Text;
        command.Parameters.Add(new SqlParameter()
            {
                ParameterName = "@LoginName",
                Value = "MyLoginNameValue",
                SqlDbType = SqlDbType.NVarChar,
                Size = 50
            });
        command.Parameters.Add(new SqlParameter()
            {
                ParameterName = "@Password",
                Value = "MyPasswordValue",
                SqlDbType = SqlDbType.NVarChar,
                Size = 50
            });

看起来最合适的方法是使用SQL Server SMO SDK。 我不关心任何其他SQL引擎,因为我们永远不会从SQL Server迁移。

您可以通过将DDL查询包装在exec来参数化此类查询,如下所示:

command.CommandText = "exec ('CREATE DATABASE ' + @DB)"

如果你像往常一样为@DB添加参数,这应该可行(至少在t-sql中)。

应该可以以相同的方式使用CREATE LOGIN

可以尝试这样的事情:

SqlCommand cmd = new SqlCommand(
                "CREATE LOGIN @login WITH password=@pwd", conn);
SqlParameter param  = new SqlParameter();
param.ParameterName = "@login ";
param.Value         = usertextforlogin; 
cmd.Parameters.Add(param);

param  = new SqlParameter();
param.ParameterName = "@pwd";
param.Value         = usertextforpwd;   

cmd.Parameters.Add(param);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM