zoukankan      html  css  js  c++  java
  • 自动将存储过程转成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
  • 相关阅读:
    功能:Java注解的介绍和反射使用
    功能:@Vaild注解使用及扩展
    转载:微信小程序view布局
    功能:Java8新特性steam流
    功能:Linux运行jar包Shell脚本
    转载:Windows使用tail -f 监控文件
    转载:java.math.BigDecimal 比较大小
    问题:跨域及解决方案
    基于 @SelectProvider 注解实现无侵入的通用Dao
    SpringBoot中的异步操作与线程池
  • 原文地址:https://www.cnblogs.com/chuncn/p/971402.html
Copyright © 2011-2022 走看看