通过c#创建存储过程
本文关键字:存储过程 创建 通过 | 更新日期: 2023-09-27 18:19:08
我试图在我的web应用程序中创建一个种子DB,我能够创建DB,填充表,我只是停留在让存储过程工作。这是我到目前为止所拥有的,但我得到CREATE/ALTER PROCEDURE必须是查询批处理中的第一个语句。'r' ningo附近的正确语法。我也试图删除GO,并在USE语句和创建过程之间添加'r'n,但没有运气。如有任何帮助,不胜感激。
StringBuilder sbSP = new StringBuilder();
sbSP.AppendLine("USE [" + txtDBName.Text + "]");
sbSP.AppendLine("GO");
sbSP.AppendLine("CREATE PROCEDURE [spInsertADAuthorization] @AD_Account varchar(255),@AD_SID varchar(255),@AD_EmailAddress varchar(255),@DateImported datetime,@Active bit AS BEGIN SET NOCOUNT ON; INSERT INTO AD_Authorization (AD_Account, AD_SID, AD_EmailAddress, DateImported, Active) VALUES (@AD_Account,@AD_SID,@AD_EmailAddress,@DateImported,@Active) END");
sbSP.AppendLine("GO");
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sbSP.ToString(), connection))
{
connection.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
connection.Close();
}
}
"GO"是批分隔符。它不是一个T-SQL语句。删除"USE"和两个"GO"行,然后再试一次。
正如其他人提到的,"GO"命令只是一个批处理分隔符,由SSMS进行解释。您需要做的是按如下方式创建存储过程:
string sql = string.Format("CREATE PROCEDURE [{0}]..[spInsertADAuthorization] @AD_Account varchar(255),@AD_SID varchar(255),@AD_EmailAddress varchar(255),@DateImported datetime,@Active bit AS BEGIN SET NOCOUNT ON; INSERT INTO AD_Authorization (AD_Account, AD_SID, AD_EmailAddress, DateImported, Active) VALUES (@AD_Account,@AD_SID,@AD_EmailAddress,@DateImported,@Active) END", txtDBName.Text);
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, connection))
{
connection.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
connection.Close();
}
}
不使用'USE [DataBase] Go',您可以很容易地设置或更改打开的SqlConnection的当前数据库:
connection.ChangeDatabase("YourDB");
一个例子:
private static void ConctDatabase(string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
MessageBox.Show("Database: {0}", conn.Database);
conn.ChangeDatabase("Northwind");
MessageBox.Show("Database: {0}", conn.Database);
}
}
如果您正在考虑创建数据库并在代码中维护版本,您可能需要考虑使用类似Migrator框架的东西,而不是手工编写所有SQL。