我正在尝试在我的网络应用程序中创建一个种子数据库,我能够创建数据库,填充表格,我只是坚持让存储过程工作。这是我到目前为止,但我得到CREATE / ALTER PROCEDURE'必须是查询批处理中的第一个语句。\ r \ n'GO'附近的语法不正确。我也尝试删除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();
}
}
答案 0 :(得分:6)
“GO”是批处理分隔符。这不是T-SQL声明。删除“USE”和“GO”两行,然后重试。
答案 1 :(得分:1)
正如其他人所提到的,“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();
}
}
答案 2 :(得分:1)
您可以非常轻松地为打开的SqlConnection设置或更改当前数据库,而不是使用'USE [DataBase] Go':
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);
}
}
答案 3 :(得分:0)
如果您正在考虑创建数据库并在代码中维护版本,您可能需要考虑使用Migrator Framework之类的东西,而不是手写所有SQL。