1

我有很多使用 .net 框架在 C# 中内联编写的 SQL 查询。例如

string sMysql = @"
SELECT
[Something]
from Person where person_uid=12"

我希望它将其转换为将用事务 SQL 编写的存储过程。

像这样的东西:

CREATE PROCEDURE [dbo].[aspnet_AnyDataInTables]
    @uid int
AS
BEGIN
SELECT
    [Something]
    from Person where person_uid=@uid
END

我可以手动完成,但我有很多内联查询要转换。有没有办法以编程方式完成这项繁忙的工作?

4

1 回答 1

1

对于您的具体示例,放弃存储过程的想法,并将您的代码片段更改为以下内容:

// initialize UID value and SQL query with parameter placeholder
int uid = 12;
sql = "SELECT [Something] FROM [Person] WHERE [person_uid] = @UID";

// initialize connection and open
using (SqlConnection connection = new SqlConnection("<connection string>")
{     
    SqlCommand command = new SqlCommand(sql, connection)
    // add UID parameter
    command.Parameters.Add(new SqlParameter("UID", uid);

    try
    {
        connection.Open();        
        // execute and read results
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            // process results        
        }
    }
    catch (Exception ex)
    {
        // handle exceptions
    }
}

如问题评论中所述,存储过程不一定比内联参数化查询快。SQL Server 甚至会缓存未参数化查询的执行计划,但我更喜欢显式声明参数。

如果您想了解更多信息,请查看这篇关于 SQL Server 2008 的执行计划缓存和重用的文章。

于 2013-02-11T16:18:02.420 回答