将参数传递给sql脚本

时间:2013-03-08 21:19:49

标签: asp.net sql asp.net-mvc-4 sql-server-2012

现在我能够通过HTTPpost方法从我的网站执行脚本。

string scriptDirectory = "c:\\Users\\user\\Documents";
                string sqlConnectionString = "Integrated Security=SSPI;" +
                    "Persist Security Info=True;Data Source=ARES";
                DirectoryInfo di = new DirectoryInfo(scriptDirectory);
                FileInfo[] rgFiles = di.GetFiles("*.sql");
                foreach (FileInfo fi in rgFiles)
                {
                    FileInfo fileInfo = new FileInfo(fi.FullName);
                    string script = fileInfo.OpenText().ReadToEnd();
                    SqlConnection connection = new SqlConnection(sqlConnectionString);
                    Server server = new Server(new ServerConnection(connection));
                    server.ConnectionContext.ExecuteNonQuery(script);
                    connection.Close();
                }

脚本正在创建一个新数据库(数据库尚未动态)。我想传入网站用户输入的参数,然后将其传递给sql脚本。基本上我希望他们选择要创建的数据库的名称。

SQL命令就在脚本的开头。

CREATE DATABASE [This is where the name will be passed to]
GO
USE[This is where the name will be passed to]

编辑:

我有这段代码

SqlCommand createDbCommand = new SqlCommand();
        createDbCommand.CommandText = "CREATE DATABASE [@DataBase]";
        createDbCommand.Parameters.Add("@DataBase", SqlDbType.Text);
        createDbCommand.Parameters["@DataBase"].Value = client.HostName;

我现在必须手动将其输入到我的脚本顶部吗?

1 个答案:

答案 0 :(得分:0)

创建一个新的SqlCommand并将脚本CommandText设置为脚本的文本,然后使用cmd.Parameters.Add设置参数。

在CRUD操作中使用参数非常简单(google为数千个资源提供“t-sql参数”),但参数化类型名称更复杂,因为这里有一篇冗长的MSDN文章:http://msdn.microsoft.com/en-us/library/bb510489.aspx

如果你正在寻找快速'n'脏的东西,你可以通过在sql文件中放置替换序列并使用正则表达式进行每次替换来推广自己的参数化系统,例如使用语法“{{1 }}”。