zoukankan
html css js c++ java
操作MS SQL Server 存储过程的类(外加ASP.NET MessageBox类)
using
System;
using
System.Data.SqlClient;
using
System.Collections;
using
System.Data;
namespace
XNet
{
/**/
/**/
/**/
///
<summary>
///
自定义信息对话框
///
</summary>
public
class
MessageBox
{
/**/
/**/
/**/
///
<summary>
///
定义一个web页面,用来显示用户自定错误提示信息
///
</summary>
System.Web.UI.Page p;
/**/
/**/
/**/
///
<summary>
///
实例时,参数为:this 如:MessageBox MB=new MessageBox(this);
///
</summary>
///
<param name="Page">
此参数为:this
</param>
public
MessageBox(System.Web.UI.Page Page)
{
p
=
Page;
//
创建页面
}
/**/
/**/
/**/
///
<summary>
///
显示对话框
///
</summary>
///
<param name="message">
提示信息
</param>
public
void
Show(
string
message)
{
string
script
=
"
<script> alert('
"
+
message
+
"
')</script>
"
;
p.Response.Write(script);
}
}
/**/
/**/
/**/
///
<summary>
///
该类简化了.net 中对Ms Sql Server 中存储过程的调用
///
</summary>
public
class
SqlOperation
{
private
SqlCommand mySqlCommand;
//
执行数据语句
private
SqlConnection Conn;
//
数据库连结
//
private string connString;
//
数据连结字符串
private
ArrayList ParaValues
=
new
ArrayList();
//
调用存储时, 按参数顺序赋值即:顺序方式。例如:Account('01',1000);
private
SortedList NameValues
=
new
SortedList();
//
调用存储时,使用参数的名称赋值即:参数列表方式。例如:Account(@account_id='01',@account_despiste=1000)
private
SortedList outValue
=
new
SortedList();
//
暂时保存存储过程输出参数的返回值列表
private
Boolean bol_ParaSerial;
//
叛断调用存储时,使用参数列表方式(useNoName=true)还是顺序方式(useNoName=false)。
private
Boolean bol_haveOutValue;
//
判断是否有返回值
private
DataSet DbSet
=
new
DataSet();
//
存储过程返回的数据集
private
string
myProName;
//
存储过程的名称
/**/
/**/
/**/
///
<summary>
///
实例化类时提供数据连结字符串
///
</summary>
///
<param name="connString">
数据连结字符串
</param>
public
SqlOperation(
string
connString)
{
Conn
=
new
SqlConnection(connString);
}
/**/
/**/
/**/
///
<summary>
///
实例化类时不提供数据连结字符串
///
</summary>
public
SqlOperation()
{
Conn
=
new
SqlConnection(Conn
=
System.Configuration.ConfigurationSettings.AppSettings[
"
ConStr
"
]) ;
//
必要时对连接字符串进行加密;
}
/**/
/**/
/**/
///
<summary>
///
获取一个Boolean值,叛断所执行的存储过程是否有返回值
///
</summary>
public
Boolean bol_haveOutValue
{
get
{
return
bol_haveOutValue;
}
}
/**/
/**/
/**/
///
<summary>
///
在不知道存储过程参数的名称,但是知道参数的顺序可以使用此方法添加参数的值,必须按参数的顺序添加.
///
用多字符串形式添加所执行的存储过程的参数的值
///
</summary>
///
<param name="values">
参数的值.添加方法:AddValueByStrings("a","b","c")
</param>
public
void
AddValueByStrings(
params
object
[] values)
{
//
ParaValues.AddRange(values);
for
(
int
i
=
0
;i
<=
values.Length
-
1
;i
++
)
{
ParaValues.Add(values[i].ToString());
}
this
.bol_ParaSerial
=
true
;
}
/**/
/**/
/**/
///
<summary>
///
在不知道存储过程参数的名称,但是知道参数的顺序可以使用此方法添加参数的值,必须按参数的顺序添加
///
不可与 "AddValueByName" 共用,可与 "InsertValueByIndex"、"AddValueByString" 共用
///
</summary>
///
<param name="values">
存储过程的值
</param>
public
void
AddValueByIndex(
object
values)
{
ParaValues.Add(values);
this
.bol_ParaSerial
=
true
;
}
/**/
/**/
/**/
///
<summary>
///
在知道存储过程名称的情况下,可以通过此方法来添加所运行的存储过程的参数值.
///
</summary>
///
<param name="name">
存储过程的名称,格式:"@name"必须以"@"开头
</param>
///
<param name="values">
存储过程的值
</param>
public
void
AddValueByName(
string
name,
object
values)
{
this
.NameValues.Add(name,values);
this
.bol_ParaSerial
=
false
;
}
/**/
/**/
/**/
///
<summary>
///
在不知道存储过程参数的名称,但是知道参数的顺序可以使用此方法添加参数的值,必须按参数的顺序添加
///
添加存储过程参数值到指的索引处,不可与 "AddValueByName" 共用,可与 "AddValueByIndex"、"AddValueByString" 共用
///
</summary>
///
<param name="index">
在添加参数值的索引位置
</param>
///
<param name="values">
要添加的参数值
</param>
public
void
InsertValueByIndex(
int
index,
object
values)
{
this
.ParaValues.Insert(index,values);
this
.bol_ParaSerial
=
false
;
}
/**/
/**/
/**/
///
<summary>
///
清除传递给存储过程参数的值
///
</summary>
public
void
ClearValue()
{
this
.ParaValues.Clear();
this
.NameValues.Clear();
this
.DbSet.Clear();
}
/**/
/**/
/**/
///
<summary>
///
获取已经赋值的参数的个数
///
</summary>
public
int
ValueCount
{
get
{
return
this
.bol_ParaSerial
==
true
?
this
.ParaValues.Count:
this
.NameValues.Count;
}
}
/**/
/**/
/**/
///
<summary>
///
获取或设置当前要运行的存储过程的名称
///
</summary>
public
string
ProcedureName
{
get
{
return
myProName;
}
set
{
myProName
=
value;
}
}
/**/
/**/
/**/
///
<summary>
///
通过索引得到返回参数值的名称
///
</summary>
///
<param name="index">
参数索引
</param>
///
<returns>
返回 string 类型
</returns>
public
string
GetOutValuesNameByIndex(
int
index)
{
return
Convert.ToString(
this
.outValue.GetKey(index));
}
/**/
/**/
/**/
///
<summary>
///
通过索引得到返回参数的值
///
</summary>
///
<param name="index">
参数索引
</param>
///
<returns>
返回 object 类型
</returns>
public
object
GetOutValuesValueByIndex(
int
index)
{
return
this
.outValue.GetByIndex(index);
}
/**/
/**/
/**/
///
<summary>
///
通过参数的名称得到返回参数的值
///
</summary>
///
<param name="name">
参数名称
</param>
///
<returns>
返回 object 类型
</returns>
public
object
GetOutValuesValueByName(
string
name)
{
//
return this.outValue.GetByIndex(this.outValue.IndexOfKey(name));
return
this
.outValue[name];
}
/**/
/**/
/**/
///
<summary>
///
获取储存过程返回值的数量
///
</summary>
public
int
OutValueCount
{
get
{
return
this
.outValue.Count;
}
}
/**/
/**/
/**/
///
<summary>
///
运行存储过程
///
</summary>
///
<param name="proName"></param>
private
void
goProc(
string
proName )
{
string
selectProcInfo;
selectProcInfo
=
"
select specific_name as ProcName,parameter_Name as ParaName,Data_Type as TypeName,ORDINAL_POSITION as Colid,parameter_Mode as Isoutparam from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='
"
+
proName
+
"
' order by ORDINAL_POSITION
"
;
this
.mySqlCommand
=
new
SqlCommand(selectProcInfo,
this
.Conn);
SqlDataAdapter myDP
=
new
SqlDataAdapter(
this
.mySqlCommand);
myDP.Fill(
this
.DbSet,
"
ProcInfo
"
);
//
等到当前存储过程的信息:参数,参数的顺序, 参数的类型,参数的传递
this
.mySqlCommand.CommandText
=
proName;
this
.mySqlCommand.CommandType
=
CommandType.StoredProcedure;
if
(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows.Count
>
0
)
//
(this.NameValues.Count>0||this.ParaValues.Count>0)&&
{
for
(
int
i
=
0
;i
<=
this
.DbSet.Tables[
"
ProcInfo
"
].Rows.Count
-
1
;i
++
)
{
SqlDbType sqlDbType;
sqlDbType
=
SqlDbType.Int;
switch
(Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
TypeName
"
]))
{
case
"
image
"
:
{
sqlDbType
=
SqlDbType.Image;
}
break
;
case
"
text
"
:
{
sqlDbType
=
SqlDbType.Text;
}
break
;
case
"
uniqueidentifier
"
:
{
sqlDbType
=
SqlDbType.UniqueIdentifier;
}
break
;
case
"
tinyint
"
:
{
sqlDbType
=
SqlDbType.TinyInt;
}
break
;
case
"
smallint
"
:
{
sqlDbType
=
SqlDbType.SmallInt;
}
break
;
case
"
int
"
:
{
sqlDbType
=
SqlDbType.Int;
}
break
;
case
"
smalldatetime
"
:
{
sqlDbType
=
SqlDbType.SmallDateTime;
}
break
;
case
"
real
"
:
{
sqlDbType
=
SqlDbType.Real;
}
break
;
case
"
money
"
:
{
sqlDbType
=
SqlDbType.Money;
}
break
;
case
"
datetime
"
:
{
sqlDbType
=
SqlDbType.DateTime;
}
break
;
case
"
float
"
:
{
sqlDbType
=
SqlDbType.Float;
}
break
;
case
"
ntext
"
:
{
sqlDbType
=
SqlDbType.NText;
}
break
;
case
"
bit
"
:
{
sqlDbType
=
SqlDbType.Bit;
}
break
;
case
"
decimal
"
:
{
sqlDbType
=
SqlDbType.Decimal;
}
break
;
case
"
smallmoney
"
:
{
sqlDbType
=
SqlDbType.SmallMoney;
}
break
;
case
"
BigInt
"
:
{
sqlDbType
=
SqlDbType.BigInt;
}
break
;
case
"
varbinary
"
:
{
sqlDbType
=
SqlDbType.VarBinary;
}
break
;
case
"
varchar
"
:
{
sqlDbType
=
SqlDbType.VarChar;
}
break
;
case
"
binary
"
:
{
sqlDbType
=
SqlDbType.Binary;
}
break
;
case
"
char
"
:
{
sqlDbType
=
SqlDbType.Char;
}
break
;
case
"
timestamp
"
:
{
sqlDbType
=
SqlDbType.Timestamp;
}
break
;
case
"
nvarchar
"
:
{
sqlDbType
=
SqlDbType.NVarChar;
}
break
;
case
"
nchar
"
:
{
sqlDbType
=
SqlDbType.NChar;
}
break
;
default
:
break
;
}
string
parameterName
=
Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
ParaName
"
]);
SqlParameter P
=
new
SqlParameter(parameterName,sqlDbType);
if
(Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
Isoutparam
"
])
==
"
INOUT
"
)
{
P.Direction
=
ParameterDirection.Output;
this
.bol_haveOutValue
=
true
;
}
else
{
if
(
this
.bol_ParaSerial
==
true
)
{
P.Value
=
(sqlDbType
==
SqlDbType.Bit
?
Convert.ToByte(
this
.ParaValues[i]):
this
.ParaValues[i]);
}
else
{
P.Value
=
(sqlDbType
==
SqlDbType.Bit
?
Convert.ToByte(
this
.NameValues[parameterName]):
this
.NameValues[parameterName]);
}
}
this
.mySqlCommand.Parameters.Add(P);
}
}
this
.myProName
=
proName;
}
private
void
OutoutValue()
{
if
(
this
.bol_haveOutValue
==
true
)
{
for
(
int
i
=
0
;i
<=
this
.DbSet.Tables[
"
ProcInfo
"
].Rows.Count
-
1
;i
++
)
{
if
(Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
Isoutparam
"
])
==
"
INOUT
"
)
{
this
.outValue.Add(Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
ParaName
"
]),
this
.mySqlCommand.Parameters[Convert.ToString(
this
.DbSet.Tables[
"
ProcInfo
"
].Rows[i][
"
ParaName
"
])].Value);
}
}
}
this
.ClearValue();
}
/**/
/**/
/**/
///
<summary>
///
通过存储过程的名称执行存储过程,返回 DataSet。
///
</summary>
///
<param name="procedureName">
存储过程的名称
</param>
///
<returns>
返回类型 DataSet
</returns>
public
DataSet ProcReturnDataSet(
string
procedureName)
{
this
.goProc(procedureName);
DataSet DBS
=
new
DataSet();
SqlDataAdapter ap
=
new
SqlDataAdapter(
this
.mySqlCommand);
ap.Fill(DBS);
this
.OutoutValue();
return
DBS;
}
/**/
/**/
/**/
///
<summary>
///
通过存储过程的名称执行存储过程,返回 DataTable。
///
</summary>
///
<param name="procedureName">
存储过程的名称
</param>
///
<param name="tableName">
指定所返回的DataTable的TableName
</param>
///
<returns>
返回类型 DataTable
</returns>
public
DataTable ProcReturnDataTable(
string
procedureName,
string
tableName)
{
this
.goProc(procedureName);
DataTable dataTable
=
new
DataTable();
dataTable.TableName
=
tableName;
SqlDataAdapter ap
=
new
SqlDataAdapter(
this
.mySqlCommand);
ap.Fill(dataTable);
this
.OutoutValue();
return
dataTable;
}
/**/
/**/
/**/
///
<summary>
///
通过存储过程的名称执行存储过程,返回 DataTable。
///
</summary>
///
<param name="procedureName">
存储过程的名称
</param>
///
<returns>
返回类型 DataTable
</returns>
public
DataTable ProcReturnDataTable(
string
procedureName)
{
this
.goProc(procedureName);
DataTable dataTable
=
new
DataTable();
SqlDataAdapter ap
=
new
SqlDataAdapter(
this
.mySqlCommand);
ap.Fill(dataTable);
this
.OutoutValue();
return
dataTable;
}
/**/
/**/
/**/
///
<summary>
///
执行指定的存储过程。无返回类型。
///
</summary>
///
<param name="procedureName">
存储过程名称
</param>
public
void
RunProcedure(
string
procedureName)
{
this
.goProc(procedureName);
this
.Conn.Open();
this
.mySqlCommand.ExecuteNonQuery();
this
.OutoutValue();
this
.Conn.Close();
}
/**/
/**/
/**/
///
<summary>
///
执行SQL语句。返回 DataSet
///
</summary>
///
<param name="sql">
所要执行的SQL语句
</param>
///
<returns>
DataSet
</returns>
public
DataSet RunSqlReturnDataSet(
string
sql,
string
tableName)
{
SqlCommand sqlCommand
=
new
SqlCommand(sql,
this
.Conn);
DataSet retrunDataSet
=
new
DataSet();
SqlDataAdapter sqlDataAdapter
=
new
SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(retrunDataSet,tableName);
return
retrunDataSet;
}
/**/
/**/
/**/
///
<summary>
///
执行SQL语句。返回 DataTable
///
</summary>
///
<param name="sql">
所要执行的SQL语句
</param>
///
<param name="tableName">
返回tableName的名称
</param>
///
<returns>
DataTable
</returns>
public
DataTable RunSqlReturnDataTable(
string
sql,
string
tableName)
{
SqlCommand sqlCommand
=
new
SqlCommand(sql,
this
.Conn);
DataTable retrunDataTable
=
new
DataTable();
retrunDataTable.TableName
=
tableName;
SqlDataAdapter sqlDataAdapter
=
new
SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(retrunDataTable);
return
retrunDataTable;
}
/**/
/**/
/**/
///
<summary>
///
执行SQL语句。返回Boolean类型
///
</summary>
///
<param name="sql">
所要执行的SQL语句
</param>
///
<returns>
Boolean
</returns>
public
Boolean RunSql(
string
sql)
{
try
{
SqlCommand sqlCommand
=
new
SqlCommand(sql,
this
.Conn);
this
.Conn.Open();
sqlCommand.ExecuteNonQuery();
this
.Conn.Close();
return
true
;
}
catch
{
return
false
;
}
}
}
}
查看全文
相关阅读:
Spring优势
Spring中的设计模式
Spring MVC体系结构
《Spring3.0就这么简单》第1章快速入门
InvocationHandler
JdkDynamicAopProxy源码
Proxy代理(AOP实现原理)
Spring AOP 实现原理
BeanFactory和ApplicationContext的作用和区别
背景图片相关设置
原文地址:https://www.cnblogs.com/studio313/p/219477.html
最新文章
使用shell自动备份数据库
php执行shell不阻塞方法
css 相对绝对定位
层就自动适应高度
HDU4372 Count the Buildings —— 组合数 + 第一类斯特林数
HDU4045 Machine scheduling —— 隔板法 + 第二类斯特林数
HDU2512 一卡通大冒险 —— 第二类斯特林数
HDU3723 Delta Wave —— 卡特兰数
HDU1133 Buy the Ticket —— 卡特兰数
卡特兰数 HDU2067 & HDU4165 & HDU1134
热门文章
HDU2068 RPG的错排 —— 错排
HDU2049 不容易系列之(4)考新郎 —— 错排
BZOJ2120 数颜色 —— 待修改莫队
BZOJ1086 王室联邦 —— 树分块
Codeforces Round #340 (Div. 2) E. XOR and Favorite Number —— 莫队算法
BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法
Codeforces Round #385 (Div. 2) Hongcow Builds A Nation —— 图论计数
HDU3480 Division —— 斜率优化DP
HDU2829 Lawrence —— 斜率优化DP
依赖注入方式
Copyright © 2011-2022 走看看