A Class For Executing MSSql Store Procedure
1using System; 2using System.IO; 3using System.Data; 4using System.Data.SqlClient; 5using System.Configuration; 6using System.Collections; 7using System.Web; 8 9namespace Forum.Component 10{ 11 /// 12 /// 存储过程的返回值纪录类 13 /// DataSet : 表示返回的表 14 /// Output : 存储过程的输出参数 15 /// Value : 存储过程的返回值 16 /// 17 public class SqlResult 18 { 19 public int Value; 20 public Hashtable Output; 21 public DataSet dataSet; 22 23 public SqlResult() 24 { 25 Value = 0; 26 Output = new Hashtable(); 27 dataSet = new DataSet(); 28 } 29 } 30 31 /// 32 /// 用于调用数据库中的存储过程,返回一个DataSet、Output、Value的SqlResult类 33 /// 34 public class SqlProcedure 35 { 36 private string sp_name; 37 private SqlConnection myConnection; 38 private SqlCommand myCommand; 39 private SqlParameter myParameter; 40 41 public string ProcedureName 42 { 43 get{ return this.sp_name; } 44 set{ this.sp_name = value; } 45 } 46 47 public SqlProcedure() : this("") 48 { 49 } 50 51 public SqlProcedure(string sp_name) 52 { 53 this.ProcedureName = sp_name; 54 } 55 56 public SqlResult Call(params object[] parameters) 57 { 58 SqlResult result = new SqlResult(); 59 60 myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); 61 62 myCommand = new SqlCommand(this.ProcedureName, myConnection); 63 myCommand.CommandType = CommandType.StoredProcedure; 64 65 SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand); 66 67 try 68 { 69 myConnection.Open(); 70 71 GetProcedureParameter(parameters); 72 73 myAdapter.Fill(result.dataSet, "Table"); 74 75 GetOutputValue(result); 76 } 77 catch(Exception e) 78 { 79 throw e; 80 } 81 finally 82 { 83 myAdapter.Dispose(); 84 myCommand.Dispose(); 85 myConnection.Close(); 86 myConnection.Dispose(); 87 } 88 89 return result; 90 } 91 92 private void GetProcedureParameter(params object[] parameters) 93 { 94 SqlCommand myCommand2 = new SqlCommand(); 95 96 myCommand2.Connection = this.myConnection; 97 myCommand2.CommandText = "select * from INFORMATION_SCHEMA.PARAMETERS" 98 + " where SPECIFIC_NAME='" +this.ProcedureName+ "' order by ORDINAL_POSITION"; 99 100 SqlDataReader reader = null; 101 try 102 { 103 reader = myCommand2.ExecuteReader(); 104 myParameter = new SqlParameter(); 105 myParameter.ParameterName = "@Value"; 106 myParameter.SqlDbType = SqlDbType.Int; 107 myParameter.Direction = ParameterDirection.ReturnValue; 108 109 myCommand.Parameters.Add(myParameter); 110 int i = 0; 111 while(reader.Read()) 112 { 113 myParameter = new SqlParameter(); 114 115 myParameter.ParameterName = reader["PARAMETER_NAME"].ToString(); 116 myParameter.Direction = reader["PARAMETER_MODE"].ToString()=="IN"?ParameterDirection.Input:ParameterDirection.Output; 117 118 switch(reader["DATA_TYPE"].ToString()) 119 { 120 case "bit" : 121 if(myParameter.Direction == ParameterDirection.Input) 122 myParameter.Value = (bool)parameters[i]; 123 myParameter.SqlDbType = SqlDbType.Bit; 124 break; 125 126 case "bigint" : 127 if(myParameter.Direction == ParameterDirection.Input) 128 myParameter.Value = (int)parameters[i]; 129 myParameter.SqlDbType = SqlDbType.BigInt; 130 break; 131 132 case "int" : 133 if(myParameter.Direction == ParameterDirection.Input) 134 myParameter.Value = (int)parameters[i]; 135 myParameter.SqlDbType = SqlDbType.Int; 136 break; 137 138 case "decimal" : 139 if(myParameter.Direction == ParameterDirection.Input) 140 myParameter.Value = (double)parameters[i]; 141 myParameter.SqlDbType = SqlDbType.Decimal; 142 myParameter.Precision = (byte)reader["NUMERIC_PRECISION"]; 143 myParameter.Scale = (byte)reader["NUMERIC_SCALE"]; 144 break; 145 146 case "nvarchar" : 147 if(myParameter.Direction == ParameterDirection.Input) 148 myParameter.Value = (string)parameters[i]; 149 myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"]; 150 myParameter.SqlDbType = SqlDbType.NVarChar; 151 break; 152 153 case "varchar" : 154 if(myParameter.Direction == ParameterDirection.Input) 155 myParameter.Value = (string)parameters[i]; 156 myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"]; 157 myParameter.SqlDbType = SqlDbType.VarChar; 158 break; 159 160 case "nchar" : 161 if(myParameter.Direction == ParameterDirection.Input) 162 myParameter.Value = (string)parameters[i]; 163 myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"]; 164 myParameter.SqlDbType = SqlDbType.NChar; 165 break; 166 167 case "char" : 168 if(myParameter.Direction == ParameterDirection.Input) 169 myParameter.Value = (string)parameters[i]; 170 myParameter.Size = (int)reader["CHARACTER_MAXIMUM_LENGTH"]; 171 myParameter.SqlDbType = SqlDbType.Char; 172 break; 173 174 case "ntext" : 175 if(myParameter.Direction == ParameterDirection.Input) 176 myParameter.Value = (string)parameters[i]; 177 myParameter.SqlDbType = SqlDbType.NText; 178 break; 179 180 case "text" : 181 if(myParameter.Direction == ParameterDirection.Input) 182 myParameter.Value = (string)parameters[i]; 183 myParameter.SqlDbType = SqlDbType.Text; 184 break; 185 186 case "datetime" : 187 if(myParameter.Direction == ParameterDirection.Input) 188 myParameter.Value = (DateTime)parameters[i]; 189 myParameter.SqlDbType = SqlDbType.DateTime; 190 break; 191 case "smalldatetime" : 192 if(myParameter.Direction == ParameterDirection.Input) 193 myParameter.Value = (DateTime)parameters[i]; 194 myParameter.SqlDbType = SqlDbType.DateTime; 195 break; 196 case "image" : 197 if(myParameter.Direction == ParameterDirection.Input) 198 { 199 HttpPostedFile PostedFile = (HttpPostedFile)parameters[i]; 200 201 Byte[] FileByteArray = new Byte[PostedFile.ContentLength]; 202 Stream StreamObject = PostedFile.InputStream; 203 StreamObject.Read(FileByteArray,0,PostedFile.ContentLength); 204 205 myParameter.Value = FileByteArray; 206 } 207 208 myParameter.SqlDbType = SqlDbType.Image; 209 break; 210 211 case "uniqueidentifier" : 212 //myParameter.Value = (string)parameters[i]; 213 myParameter.SqlDbType = SqlDbType.UniqueIdentifier; 214 break; 215 216 default : break; 217 } 218 i++; 219 220 myCommand.Parameters.Add(myParameter); 221 } 222 } 223 catch(Exception e) 224 { 225 throw e; 226 227 } 228 finally 229 { 230 if(reader!=null) reader.Close(); 231 myCommand2.Dispose(); 232 } 233 } 234 235 236 private void GetOutputValue(SqlResult result) 237 { 238 result.Value = (int)myCommand.Parameters["@Value"].Value; 239 240 foreach(SqlParameter parameter in myCommand.Parameters) 241 { 242 if(parameter.Direction == ParameterDirection.Output) 243 { 244 result.Output.Add(parameter.ParameterName, parameter.Value); 245 } 246 } 247 } 248 } 249}
调用方法:
1using Forum.Component 2private void Submit1_ServerClick(object sender, System.EventArgs e) 3{ 4 protected SqlProcedure procedure=new SqlProcedure(); 5 public SqlResult result; 6 HttpPostedFile picture_PostedFile =picture.PostedFile; 7 HttpPostedFile taskpic1_PostedFile = taskpic1.PostedFile; 8 HttpPostedFile taskpic2_PostedFile = taskpic2.PostedFile; 9 10 procedure.ProcedureName="Teacher_insert"; 11 result=procedure.Call(name.Text,name.Text,gender.SelectedItem.Value, 12 Convert.ToDateTime(birthday.Value),headship.Text,departmentname.SelectedItem.Value.ToString(), 13 picture_PostedFile,instruction.Value,task.Value,workplace.Text,telephone.Text,email.Text, 14 taskpic1_PostedFile,taskpic2_PostedFile,degree.Text,job.Text,other.Value,false); 15 if (result.Value==1) 16 { 17 message.Text="添加成功!"; 18 } 19 else 20 { 21 message.Text="添加失败!"; 22 } 23 }
A Class For Executing MSSql Store Procedure相关推荐
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括: 如 ...
- postgresql 11 store procedure 初探之一
os: centos 7.4 db: postgresql 11.5 postgresql 11 之前的函数(function)和存储过程(procedure)为同义词,语法如下: CREATE [O ...
- Remote Procedure Calls
Remote Procedure Calls Paul Krzyzanowski October 2, 2017 Introduction, or what's wrong with sockets? ...
- Delphi笔记整理(二)
◇[DELPHI]字符的加密与解密 function cryptstr(const s:string; stype: dword):string; var i: integer; fkey: inte ...
- exec sql_EXEC SQL概述和示例
exec sql In this article, we will review on EXEC SQL statement in SQL Server and explore a few examp ...
- 使用OStressSQL Server压力测试
什么是SQL Server压力测试? (What is SQL Server Stress Testing?) Implementing a new database consists of vari ...
- SQL Server存储过程初学者
In this article, we will learn how to create stored procedures in SQL Server with different examples ...
- 如何在SQL Server中实现错误处理
错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...
- aws rds监控慢sql_使用本机备份的AWS RDS SQL Server迁移
aws rds监控慢sql In this article, we will review how to migrate database from on-premises SQL Server in ...
最新文章
- 发布乐维Webgis平台1.0 Demo,欢迎加入参与制作前端
- spss主成分综合得分_【SPSS因子分析】在SPSS中对医学多个数值变量进行因子分析 —【杏花开医学统计】...
- 牛客题霸 [用两个栈实现队列] C++题解/答案
- Pandas dtypes(数据类型)
- If you insist running as root, then set the environment variable RUN_AS_USER=root...
- micropython教程nucleo-f767zi开发板_Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)...
- MySQL中update语句的深入分析
- office2010如何使用excel冻结窗格
- 优锘:ThingJS-X济南广州线下研讨会教你做数字孪生
- 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作
- 如果你也被pyinstaller折磨,建议阅读,pyinstaller打包教程。
- dll.a和lib 引用MinGW生成的dll.a后出现的问题
- positio有哪些属性?position的属性如何使用
- 微信聊天中上怎么用计算机,电脑可以上微信吗,教您电脑怎么用微信
- 【高速接口-RapidIO】2、RapidIO串行物理层的包与控制符号
- 使用pkg将node项目打包成exe后,EXE文件打开闪退
- 自定义ScaleLayout (模仿小米相册查看图片效果)(转载自作者 _deadline )
- HTML实现调用百度在线翻译API
- sqlserver mysql 7303_将MySQL库的表转入到MSSQL中的某个库中(Employees下的Employees表 → pubs库下)_2...
- HideToolz _隐藏进程工具
热门文章
- ssm框架的整合搭建(一)
- Linux内存管理 (4)分配物理页面
- Ubuntu 安装LAMP ...
- 使用 Spring 2.5 基于注解驱动的 Spring MVC(二)
- 【转帖】dopod touch diamond 应用小常识:)
- 把女友升级为老婆的时候发生的BUG
- 深度学习机器学习大牛
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第4章-一类欧拉-拉格朗日系统全局稳定的输出反馈协调控制
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第1章-多智能体系统一致性问题概述
- 强大的grep命令使用经验