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相关推荐

  1. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括: 如 ...

  2. postgresql 11 store procedure 初探之一

    os: centos 7.4 db: postgresql 11.5 postgresql 11 之前的函数(function)和存储过程(procedure)为同义词,语法如下: CREATE [O ...

  3. Remote Procedure Calls

    Remote Procedure Calls Paul Krzyzanowski October 2, 2017 Introduction, or what's wrong with sockets? ...

  4. Delphi笔记整理(二)

    ◇[DELPHI]字符的加密与解密 function cryptstr(const s:string; stype: dword):string; var i: integer; fkey: inte ...

  5. exec sql_EXEC SQL概述和示例

    exec sql In this article, we will review on EXEC SQL statement in SQL Server and explore a few examp ...

  6. 使用OStressSQL Server压力测试

    什么是SQL Server压力测试? (What is SQL Server Stress Testing?) Implementing a new database consists of vari ...

  7. SQL Server存储过程初学者

    In this article, we will learn how to create stored procedures in SQL Server with different examples ...

  8. 如何在SQL Server中实现错误处理

    错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...

  9. 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 ...

最新文章

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

热门文章

  1. python.day01笔记
  2. 使用phpize安装php模块
  3. 使用Windows的分析等待链(analyze wait chain)来诊断没用响应的应用
  4. 实现透明渐变的Activity
  5. SQL Server 批量插入数据的两种方法(转)
  6. 挖掘形态数轴的不确定性
  7. 神经网络训练集的图片到底是如何相互作用的?
  8. html多窗口排列顺序,多窗口页面(Frames)
  9. java单例注册表_Spring对单例的底层实现,单例注册表
  10. 【控制】《最优控制理论与系统》-胡寿松老师-第5章-线性最优状态调节器