SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTERPROCEDURE[dbo].[sqltoolforexcuteandadapter] ( @objNamenvarchar(100),--存储过程名称 @isexcuteint--是否为execute 或者是sqladapter 0是execute,1是sqladapter ) AS SET NOCOUNT ON DECLARE@parameterCountint DECLARE@errMsgvarchar(100) DECLARE@parameterAtvarchar(1) DECLARE@connNamevarchar(100) DECLARE@outputValuesvarchar(100) --Change the following variable to the name of your connection instance SET@connName='conn.Connection' SET@parameterAt='' SET@outputValues='' 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.syscolumns.isoutparam AS ColIsOut, dbo.systypes.xtype INTO #t_obj FROM dbo.syscolumns INNERJOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id INNERJOIN dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype WHERE (dbo.sysobjects.name =@objName) AND (dbo.systypes.status <>1) ORDERBY dbo.sysobjects.name, dbo.syscolumns.colorder SET@parameterCount=(SELECTcount(*) FROM #t_obj) IF(@parameterCount<1) SET@errMsg='No Parameters/Fields found for '+@objName IF(@errMsgisnull) BEGIN print'SqlConnection conn = new SqlConnection(""); SqlCommand com = new SqlCommand("'+@objName+'", conn);' print'com.CommandType = CommandType.StoredProcedure;' PRINT' SqlParameter[] Parameters = new SqlParameter['+ cast(@parameterCountasvarchar) +'];' PRINT'' DECLARE@source_namenvarchar, @source_typevarchar, @col_namenvarchar(100), @col_orderint, @col_typevarchar(20), @col_lenint, @col_keyint, @col_xtypeint, @col_redefvarchar(20), @col_isouttinyint DECLARE cur CURSORFOR SELECT*FROM #t_obj OPEN cur -- Perform the first fetch. FETCHNEXTFROM cur INTO @source_name,@source_type,@col_name,@col_order,@col_len,@col_key,@col_isout,@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=(SELECTCASE@col_xtype WHEN34THEN'Image' WHEN35THEN'Text' WHEN36THEN'UniqueIdentifier' WHEN48THEN'TinyInt' WHEN52THEN'SmallInt' WHEN56THEN'Int' WHEN58THEN'SmallDateTime' WHEN59THEN'Real' WHEN60THEN'Money' WHEN61THEN'DateTime' WHEN62THEN'Float' WHEN99THEN'NText' WHEN104THEN'Bit' WHEN106THEN'Decimal' WHEN122THEN'SmallMoney' WHEN127THEN'BigInt' WHEN165THEN'VarBinary' WHEN167THEN'VarChar' WHEN173THEN'Binary' WHEN175THEN'Char' WHEN231THEN'NVarChar' WHEN239THEN'NChar' ELSE'!MISSING' ENDAS C) --Write out the parameter PRINT' Parameters['+cast(@col_order-1asvarchar) +'] = new SqlParameter("'+@parameterAt+@col_name +'", SqlDbType.'+@col_redef +');' --Write out the parameter direction it is output IF(@col_isout=1) BEGIN PRINT' Parameters['+cast(@col_order-1asvarchar) +'].Direction=ParameterDirection.Output;' SET@outputValues=@outputValues+' ?=Parameters['+ cast(@col_order-1asvarchar) +'].Value;' END ELSE BEGIN --Write out the parameter value line PRINT' Parameters['+cast(@col_order-1asvarchar) +'].Value = ?;' END --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' Parameters['+cast(@col_order-1asvarchar) + '].Size='+cast(@col_lenasvarchar) +';' END -- This is executed as long as the previous fetch succeeds. FETCHNEXTFROM cur INTO @source_name,@source_type,@col_name,@col_order, @col_len,@col_key,@col_isout,@col_xtype END PRINT'' print' com.Parameters.AddRange(Parameters);' if@isexcute=0--使用的execute方法执行sql语句 begin print'try { conn.Open(); com.ExecuteNonQuery(); } catch (Exception ee) { throw ee; } finally { conn.Close(); }' end elseif@isexcute=1--需要返回数据集的话使用这个 begin print'try { da.Fill(ds); } catch (Exception ee) { throw ee; } finally { //do what you want to do or dispose resoures. }' end CLOSE cur DEALLOCATE cur END if(LEN(@errMsg)>0) PRINT@errMsg DROPTABLE #t_obj SET NOCOUNT ON