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 ...
最新文章
- 卡尔曼滤波:从入门到精通
- 图灵奖公布:高性能计算先驱、为超算铺平道路的Jack Dongarra获奖
- android 百度移动搜索 url 参数,百度移动搜索开放适配服务的3种方法
- Team Foundation Server安装指南
- 保驾护航金三银四,妈妈再也不用担心我找工作了!
- 韩顺平轻松搞定网页设计(html+css+js),韩顺平轻松搞定网页设计方案(html+css+js)之javascript现场授课笔记(完整版).doc...
- js 把对象按照属性名的字母顺序进行排列
- 贪吃蛇 c语言 不死模式,c语言贪吃蛇游戏完整代码,c语言贪吃蛇教程
- OPencv 灰度直方图、直方图规定化
- android设置高度比例,Android View设置宽高比
- 自己动手开发网络服务器(一)
- win10如何打开本地组策略编辑器
- BI选型之国内外BI产品对比分析
- 创新指南|如何以STEPPS模型6招打造病毒式传播产品
- Java异常处理最佳实践及陷阱防范
- 接口测试——postman文件夹介绍以及批量执行用例
- 颜色搭配,典型配色方案
- 计科学硕考研初试经验贴(11408)
- 利用IPv6实现公网访问远程桌面
- gx works2 存储器空间或桌面堆栈不足_小户型旧房翻新的8个重点,小家也能住出大空间...