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
;
}
}
}
}
查看全文
相关阅读:
Intel 10nm全系曝光!巨头也跑不动了
国产智能手机占据半壁江山却依旧难掩三大尴尬事实
顺势而为,HTML发展与UI组件设计进化
怎么让引导不再是无用小透明?
C++BUILDER的文件操作
C++ Builder获取系统文件的路径
C++Builder 常用String
C++ 判断是否为邮箱格式
AnsiString, String, char,char
BCB如何编写,调用动态链接库DLL
原文地址:https://www.cnblogs.com/studio313/p/219477.html
最新文章
火狐Firefox浏览器所有历史版本下载地址
centos 主机名突然变成bogon的解决方法
Centos 7上安装Elasticsearch
centos查看命令
dynamic的好处
IEnumerable与IQueryable区别
任务调度quartz
VSCode调试设置
VSCode调试C#控制台与单元测试
dotnet core 命令
热门文章
websocket
单元测试
C# 操作 MongoDB
vs 2017局域网内调试
Storm 1.0.1发布 .NET 适配也已到来
IT招聘市场最热门的五类开源技术人才
微服务与Java EE
再谈网络爬虫中的编码识别问题
你确实应该学习并使用的 10 个 C# 特性
70万年薪招聘新媒体运营资深经理,高了还是低了?
Copyright © 2011-2022 走看看