有没有将c#函数转换为sql server存储过程?

时间:2010-07-12 11:17:01

标签: c# sql stored-procedures

我有一个用c#编写的存储过程:

SqlConnection scn = new SqlConnection("context connection=true;");
        SqlCommand scm = new SqlCommand("Select * from EPMS_Filters",scn);
        SqlDataAdapter sda = new SqlDataAdapter(scm);
        DataSet ds = new DataSet();


        //template for select Query.
        String SelectQry = "select convert(varchar,TimeStamp,101) as TimeStamp, avg({0} from EPMSDataTable  where timestamp between '{1}' and '{2}' group by convert(varchar,timestamp,101)";
        String filters = "";

        //select clause part which contains simple columns select col1, col2...
        sda.SelectCommand.CommandText = "Select column_name from information_schema.columns where table_name = 'EPMSDataTable' and column_name <> 'timestamp'";
        sda.Fill(ds, "SimpleFilters");
        foreach (DataRow dr in ds.Tables["SimpleFilters"].Rows)
        {
            String fName = dr[0].ToString();
            filters += dr[0] + ")as " + dr[0] + ", avg(";
        }

        filters = filters.TrimEnd(", avg(".ToCharArray()); //remove last ','

        scm.CommandText = String.Format(SelectQry,filters,start.ToString(),end.ToString());
        scn.Open();
        SqlContext.Pipe.Send(scm.ExecuteReader());
        scn.Close();

无论如何还是有一些工具可以将此代码转换为sql存储过程代码?或者我必须手动重写它? 我问的原因是,例如我不知道如何处理将数据集变量转换为sql类型..

谢谢!

格雷格

4 个答案:

答案 0 :(得分:1)

答案是否定的,任何自动化流程都不太可能将C#转变为SQL存储过程。

答案 1 :(得分:1)

你必须手动重写它。但这并不难。

对于通过数据表的循环,您可以用光标替换它,如下所示:

SET NOCOUNT ON;

DECLARE ohno_a_cursor CURSOR FAST_FORWARD FOR 
Select column_name from information_schema.columns where table_name = 'EPMSDataTable' and column_name <> 'timestamp'

DECLARE @colname nvarchar(max);

OPEN ohno_a_cursor;
FETCH NEXT FROM ohno_a_cursor INTO @colname
WHILE @@FETCH_STATUS = 0 BEGIN
    SET @Filters = @Filters + '(whatever');
END

CLOSE ohno_a_cursor;
DEALLOCATE ohno_a_cursor;

答案 2 :(得分:1)

选中此链接,可能会对您有所帮助。 http://www.atomicsql.com

它从c#转换为Mssql存储过程。

输入是包含c#代码的dll,输出是sql脚本文件。

查看帮助说明

-对于该线程的管理员:请不要删除此注释。该工具不是病毒,也不是您破坏的东西,否则可能会损坏计算机。

答案 3 :(得分:0)

通过在visual studio中使用sql server项目,您可以将现有的c#代码更改为存储过程。

这些函数使用[Microsoft.SqlServer.Server.SqlProcedure]

进行修饰

并且你的函数只返回sqlboolean类型,如果你想要其他返回类型,你可以使用输出参数。

检查http://blog.sqlauthority.com/2008/10/19/sql-server-introduction-to-clr-simple-example-of-clr-stored-procedure/