我有以下几点
SqlCommand cmd = getSQLCommand();
using (cmd.Connection)
using (cmd)
{
try
{
string dbName = txt_DatabaseName.Text;
var createDatabaseQuery = "exec ('CREATE DATABASE ' + @databaseName)";
var sqlCommand = new SqlCommand(createDatabaseQuery, cmd.Connection);
sqlCommand.Parameters.Add("@databaseName", SqlDbType.Text);
sqlCommand.Parameters["@databaseName"].Value = dbName.ToString();
cmd.Connection.Open();
sqlCommand.ExecuteNonQuery();
}
catch (SqlException ex)
{
Console.WriteLine(ex.ToString());
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('SQL Error. Record not added.')", true);
}
finally
{
cmd.Connection.Close();
}
}我完全知道在DDL操作中不支持params,所以我有一个非常酷的线程,我一直在用它来帮助我在"try“中编写内容。How to use SqlCommand to CREATE DATABASE with parameterized db name?
也就是说,我仍然收到一个异常错误,因为在'Database‘附近有错误的语法。这可能是用户的错误,但我已经被这个问题困扰了一个小时左右。
有什么想法/改进吗?
附注:我所要做的就是使用txt_DatabaseName.Text中的动态值以编程方式创建一个数据库(是的,我将尝试在输入空格或任何SQL中不支持的字符的情况下进行错误处理。
附注:有没有什么关于sql注入攻击的文章可以让我看一看,或者有什么关于构造方法的建议?这是一个简单的练习,我在我的本地机器上做,不面向公众,但如果可能的话,我仍然希望领先于游戏。
发布于 2017-07-18 20:19:53
您根本不需要exec部分。在删除exec之后,您再次收到错误,原因是您将查询包装在单引号'CREATE DATABASE '中,这将被视为字符串文字。它应该只是
var createDatabaseQuery = string.Format("CREATE DATABASE {0}",DBnamevariable);
var sqlCommand = new SqlCommand(createDatabaseQuery, cmd.Connection);https://stackoverflow.com/questions/45166357
复制相似问题