• 自动将存储过程转成C#代码的过程[转]


    自动将存储过程转成C#代码的过程
    一个国外程序员写的自动将存储过程转成C#源码的存储过程。我没有作任何的更改﹐原版贴在这里﹐希望对有些人能够有所帮助:
    CREATE PROCEDURE dbo.tools_CS_SPROC_Builder
    (
    @objName nvarchar(100)
    )
    AS
    /*
    ___________________________________________________________________
    Name: CS SPROC Builder
    Version: 1
    Date: 20/06/2004
    Author: Paul McKenzie
    Description: Call this stored procedue passing the name of your
       database object that you wish to insert/update
       from .NET (C#) and the code returns code to copy
       and paste into your application. This version is
       for use with "Microsoft Data Application Block".
    Sample:
       EXEC tools_CS_SPROC_Builder 'InsertSQL'
    */
    SET NOCOUNT ON

    DECLARE @parameterCount int
    DECLARE @errMsg varchar(100)
    DECLARE @parameterAt varchar(1)
    DECLARE @connName varchar(100)

    SET @connName='conn.Connection'
    SET @parameterAt=''
      
    SELECT
      dbo.sysobjects.name AS ObjName,
      dbo.sysobjects.xtype AS ObjType,
      dbo.syscolumns.name AS ColName,
      dbo.syscolumns.colorder AS ColOrder,
      dbo.syscolumns.length AS ColLen,
      dbo.syscolumns.colstat AS ColKey,
      dbo.systypes.xtype
    INTO #t_obj
    FROM
      dbo.syscolumns INNER JOIN
      dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id INNER JOIN
      dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype
    WHERE
      (dbo.sysobjects.name = @objName)
      AND
      (dbo.systypes.status <> 1)
    ORDER BY
      dbo.sysobjects.name,
      dbo.syscolumns.colorder

    SET @parameterCount=(SELECT count(*) FROM #t_obj)

    IF(@parameterCount<1) SET @errMsg='No Parameters/Fields found for ' + @objName

    IF(@errMsg is null)
      BEGIN
       PRINT 'try'
       PRINT ' {'
       PRINT ' SqlParameter[] paramsToStore = new SqlParameter[' + cast(@parameterCount as varchar) + '];'
       PRINT ''
      
       DECLARE @source_name nvarchar,@source_type varchar,@col_name nvarchar(100),@col_order int,@col_type varchar(20),@col_len int,@col_key int,@col_xtype int,@col_redef varchar(20)
     
       DECLARE cur CURSOR FOR
       SELECT * FROM #t_obj
       OPEN cur
       -- Perform the first fetch.
       FETCH NEXT FROM cur
       INTO @source_name,@source_type,@col_name,@col_order,@col_len,@col_key,@col_xtype
     
       if(@source_type=N'U') SET @parameterAt='@'
       -- Check @@FETCH_STATUS to see if there are any more rows to fetch.
       WHILE @@FETCH_STATUS = 0
       BEGIN
        SET @col_redef=(SELECT
           CASE @col_xtype
         WHEN 34 THEN 'Image'
         WHEN 35 THEN 'Text'
         WHEN 48 THEN 'TinyInt'
         WHEN 52 THEN 'SmallInt'
         WHEN 56 THEN 'Int'
         WHEN 58 THEN 'SmallDateTime'
         WHEN 59 THEN 'Real'
         WHEN 60 THEN 'Money'
         WHEN 61 THEN 'DateTime'
         WHEN 62 THEN 'Float'
         WHEN 99 THEN 'NText'
         WHEN 104 THEN 'Bit'
         WHEN 106 THEN 'Decimal'
         WHEN 122 THEN 'SmallMoney'
         WHEN 127 THEN 'BigInt'
         WHEN 165 THEN 'VarBinary'
         WHEN 167 THEN 'VarChar'
         WHEN 173 THEN 'Binary'
         WHEN 175 THEN 'Char'
         WHEN 231 THEN 'NVarChar'
         WHEN 239 THEN 'NChar'
         ELSE '!MISSING'

           END AS C)
        --Write out the parameter
        PRINT ' paramsToStore[' + cast(@col_order-1 as varchar)
         + '] = new SqlParameter("' + @parameterAt + @col_name
         + '", SqlDbType.' + @col_redef
         + ');'

        --If the type is a string then output the size declaration
        IF(@col_xtype=231)OR(@col_xtype=167)OR(@col_xtype=175)OR(@col_xtype=99)OR(@col_xtype=35)
         BEGIN
         PRINT ' paramsToStore[' + cast(@col_order-1 as varchar)
          + '].Size=' + cast(@col_len as varchar) + ';'
         END
        PRINT ' paramsToStore['+ cast(@col_order-1 as varchar)
         + '].Value = ;'
           -- This is executed as long as the previous fetch succeeds.
           FETCH NEXT FROM cur
        INTO @source_name,@source_type,@col_name,@col_order,@col_len,@col_key,@col_xtype
       END
       PRINT ''
       PRINT ' SqlHelper.ExecuteNonQuery(' + @connName + ', CommandType.StoredProcedure,"' + @objName + '", paramsToStore);'
       PRINT ' }'
       PRINT 'catch(Exception excp)'
       PRINT ' {'
       PRINT ' }'
       PRINT 'finally'
       PRINT ' {'
       PRINT ' ' + @connName + '.Dispose();'
       PRINT ' ' + @connName + '.Close();'
       PRINT ' }'
       CLOSE cur
       DEALLOCATE cur
      END

    if(LEN(@errMsg)>0) PRINT @errMsg
    DROP TABLE #t_obj
    SET NOCOUNT ON

    GO
  • 相关阅读:
    jQuery-选择器
    Html-CSS-细节处理
    JS-练习题
    将博客搬至CSDN
    Linux学习(推荐学习资源)——保持更新
    借助Git实现本地与GitHub远程双向传输(同步GitHub仓库)以及一些使用错误解决
    Linux学习使用Vim
    linux学习之Ubuntu
    在docker中创建使用MySQL,并实现远程连接navicat
    Swing系列之控件一
  • 原文地址:https://www.cnblogs.com/chuncn/p/971402.html
Copyright © 2020-2023  润新知