首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c# sql命令中的语法错误

c# sql命令中的语法错误
EN

Stack Overflow用户
提问于 2017-07-18 20:07:35
回答 2查看 449关注 0票数 1

我有以下几点

代码语言:javascript
复制
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注入攻击的文章可以让我看一看,或者有什么关于构造方法的建议?这是一个简单的练习,我在我的本地机器上做,不面向公众,但如果可能的话,我仍然希望领先于游戏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-18 20:19:53

您根本不需要exec部分。在删除exec之后,您再次收到错误,原因是您将查询包装在单引号'CREATE DATABASE '中,这将被视为字符串文字。它应该只是

代码语言:javascript
复制
var createDatabaseQuery = string.Format("CREATE DATABASE {0}",DBnamevariable);
var sqlCommand = new SqlCommand(createDatabaseQuery, cmd.Connection);
票数 0
EN

Stack Overflow用户

发布于 2017-07-18 20:12:11

看一看sql profiler,看看对数据库触发了什么。如果它不工作,请尝试在Management studio中执行查询,以查看它是否工作。它可能是某种不允许的特殊字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45166357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档