如何从c#代码中为SQL Server创建存储过程

本文关键字:SQL Server 创建 存储过程 代码 | 更新日期: 2023-09-27 18:04:39

我正在尝试从c# winforms应用程序创建SQL服务器中的存储过程。这是我目前使用的函数

public void CreateStoredProcedure(string SPname)
{
        try
        {
            string query = "CREATE PROCEDURE " + SPname + " AS SELECT * FROM People WHERE Address='Mumbai'";
            connection.Open();
            var command = new SqlCommand();
            command.CommandType = CommandType.Text;
            command.CommandText = "EXEC " + query;
            command.ExecuteNonQuery();
        }
        finally
        {
            connection.Close();
        }
}

我这样做对吗?每次我尝试这样做时,都会得到一个错误消息。

嘿,谢谢大家!!现在起作用了…这是最后完成的代码。

 public void CreateStoredProcedure(string SPname)
    {
        try
        {
            string query = "CREATE PROCEDURE " + SPname + " AS SELECT * FROM People WHERE Address='Mumbai'";
            connection.Open();
            var command = new SqlCommand();
            command.Connection = connection;
            command.CommandText = query;
            command.ExecuteNonQuery();
            var adapter = new SqlDataAdapter(command);
            adapter.Fill(dt);
            dgv.DataSource = dt;
        }
        finally
        {
            connection.Close();
        }
    }

感谢!:)

如何从c#代码中为SQL Server创建存储过程

创建存储过程时不需要EXEC并且需要一个活动连接

您可以尝试:

 command.CommandType = CommandType.StoredProcedure;

初始化命令的连接属性:

            command.Connection = connection;

或者,您可以使用公共语言运行时集成来创建存储过程,而不是在运行中创建存储过程。

如何使用公共语言运行时集成创建和运行SQL Server存储过程

将CLR存储过程部署到数据库

在上面的尝试中,代码只能作为一次性运行,因为它包含一个CREATE命令。然后必须将其更改为ALTER,否则每次都需要删除它并重新创建。这可能不是最佳实践,但请记住。

您需要定义一个连接对象并将其与命令对象链接

    CommandObject.Connection= ConnectionObject;

也是CommandType。默认为文本。

还可以使用

检查连接是否打开
    if(ConnectionObject.State== ConncetionState.Closed)
       {
        ConnectionObject.Open();
        }

如果它是关闭的,您将需要一个活动的Open连接来传递查询。