例如在向数据库添加新数据时,需要检测是否有重复
本例介绍如何把这个检测的过程放在存储过程中,并用程序调用检测的结果做出反应。
存储过程如下
CREATE PROCEDURE DInstitute_Insert
@InstituteNO nvarchar(6),@InstituteName nvarchar(40)
AS
declare @return int,@count int
if(ltrim(rtrim(@InstituteName))='' or ltrim(rtrim(@InstituteNO))='')
select @return=3--返回3表示提交的数据有空值
else
begin
select @count=count(1) from DInstitute where InstituteNO=@InstituteNO
if(@count>0)
select @return=1--返回1表示编号有重复
else
begin
insert into DInstitute (InstituteNO,InstituteName) values (@InstituteNO,@InstituteName)
if(@@error>0)
select @return=2--返回2表示数据操作错误
else
select @return=0--返回0表示数据操作成功
end
end
return @return
GO
其中DInstitute 是一个学院信息表。只有InstituteNO(学院编号)、InstituteName(学院名称)两个字段。
在C#中调用本存储过程的代码如下:
//执行插入操作
SqlCommand com1 = new SqlCommand("DInstitute_Insert", DBcon);
if (com1.Connection.State == ConnectionState.Closed)
com1.Connection.Open();
com1.CommandType = CommandType.StoredProcedure;
com1.Parameters.Add(new SqlParameter("@InstituteNO",SqlDbType.NVarChar,6));
com1.Parameters.Add(new SqlParameter("@InstituteName", SqlDbType.NVarChar, 40));
com1.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
com1.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
com1.Parameters["@InstituteNO"].Value = t_NO.Text;
com1.Parameters["@InstituteName"].Value = t_name.Text;
try
{
com1.ExecuteScalar();
}
catch(SqlException ee)
{
DB.msgbox("操作失败!"+ee.Message.ToString());
return;
}
finally
{
com1.Connection.Close();
}
string temp = com1.Parameters["@return"].Value.ToString();
//返回0表示数据操作成功
//返回1表示编号有重复
//返回2表示数据操作错误
//返回3表示提交的数据有空值
switch (temp)
{
case "0":
DB.msgbox("添加成功!");
break;
case "1":
DB.msgbox("编号有重复!");
break;
case "2":
DB.msgbox("数据操作错误!");
break;
case "3":
DB.msgbox("提交的数据有空值!");
break;
}
Binding(); //刷新datagrid
---------------------------------------------- 补充其它方法。
System.Data.SqlClient.SqlConnection scon = new System.Data.SqlClient.SqlConnection("server=Netangel;uid=etopsUS;pwd=etops;database=etops");
System.Data.SqlClient.SqlCommand scom = new System.Data.SqlClient.SqlCommand("",scon); scon.Open();
scom.CommandText="p_CorpClassAdd";
scom.CommandType = System.Data.CommandType.StoredProcedure;
scom.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)) //增加存储过程的返回值参数 scom.ExecuteNonQuery();
Response.Write(scom.Parameters["ReturnValue"].Value.ToString()); //输出存储过程
cmd = New SqlCommand("sp_del_office_byID", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@OfficeID", SqlDbType.Int)
cmd.Parameters("@OfficeID").Value = officeid_pk
cmd.Parameters.Add("s", SqlDbType.Int)
cmd.Parameters("s").Direction = ParameterDirection.ReturnValue
cmd.ExecuteNonQuery()
s = cmd.Parameters("s").Value
通用的,输入输出参数各1个,调用时只要传入参数和存储过程名即可返回结果
//程序部分
public bool Execute(string Procname,SqlParameter []parameter,out string procout)
{
SqlConnection Sqlcon=new SqlConnection(Configuration.ConnectionString);
SqlCommand Sqlcom=new SqlCommand();
Sqlcon.Open();
Sqlcom.Connection=Sqlcon;
Sqlcom.CommandText=Procname;
Sqlcom.CommandType=CommandType.StoredProcedure;
Sqlcom.Parameters.Add(new SqlParameter("@m_return",SqlDbType.Int));
for(int i=0;i<parameter.Length;i++)
Sqlcom.Parameters.Add(parameter[i]);
Sqlcom.Parameters["@m_return"].Direction=ParameterDirection.ReturnValue;
Sqlcom.ExecuteNonQuery();
procout=Sqlcom.Parameters["@m_return"].Value.ToString();
return true;
} private void button2_Click(object sender, System.EventArgs e)
{
SqlParameter[] parameter={new SqlParameter("@ID",SqlDbType.Int)};
parameter[0].Value=1;
string UC;
bool retVal=Execute("管理员_CheckExist",parameter,out UC);
button2.Text=UC.ToString();
} //存储过程部分
ALTER PROCEDURE dbo.管理员_CheckExist
@ID int
AS
declare @matchCount int
select @matchCount = count(*) from 管理员 where ID=@ID
return @matchCount
.net 接收存储过程的返回值 。。。。的更多相关文章
-
JDBC和JPA调用储存过程 接收存储过程有返回值
============jdbc==========================================--java代码:一个输出参数--String connURL = null;Con ...
-
SqlServer如何获取存储过程的返回值
1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int , 3 @id bigint OUTPUT 4 ) 5 AS 6 ...
-
关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...
-
C#获取执行存储过程的"; 返回值";代码
以下是C#代码: /// <summary> /// 执行存储过程,返回" 返回值" /// </summary> /// <param name=& ...
-
利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程
1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器 ...
-
在Delphi中如何获得SQL中存储过程的返回值?
示例存储过程:create procedure proc_loginusername varchar(20),password varchar(20)asdeclare @result intsele ...
-
MSSQL - 存储过程Return返回值
1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...
-
Entity Framework中对存储过程的返回值的处理
很早就开始注意到EF了,但一直没有机会用,换了工作后,第一个项目就使用EF6进行开发. 项目不是很大,EF完全可以胜任. 但是开发过程中,难免还是会遇到一些复杂的运算,需要频繁访问数据库. 此时,想到 ...
-
SqlServer和MySQL中存储过程out返回值处理C#代码
1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // stri ...
随机推荐
-
Office 365 系列五 -------- Imap邮箱迁移步骤
当客户购买了我们的Office 365之后,第一个功能必然是会用我们的企业邮箱,如果企业之前是用 263.腾讯.网易等的邮件厂商的话,必然会涉及到邮件的迁移, 其实说到邮箱迁移,我们办法很多,如果人数 ...
-
K/3 Cloud开发之旅--环境准备篇
K/3 Cloud是金蝶软件新推出的一款产品,介绍我就不多说了,谁用谁知道啊,那么我们如果要基于它做开发需要什么环境呢 开发环境必备软件 1 操作系统Windows X86/X64 或者Windows ...
-
迷信AgainAndAgain
又重新在VBox中安装Debian其它镜像两次,依然在安装桌面软件包时挂掉...
-
Aspose.Words 的使用 Aspose.Total_for_.NET
最近在做有个业务需要Word做好模版,数据库取出业务数据在写入Word模版里面,然后生成PDF给客户端的业务人员 之前找了半天,没有找到用微软的Microsoft.Office.Interop.Wor ...
- java 21 - 7 IO流小结的图解
-
OSAL多任务资源分配机制
转自OSAL多任务资源分配机制 一.概述 OSAL (Operating System Abstraction Layer),翻译为"操作系统抽象层". 个应用程序对象. ...
-
python+selenium基础之XPATH轴定位(第二篇)
第一篇讲了xpath定位的一些基本定位方法,这里再介绍一种:xpath轴定位,应用场景是当某个元素的各个属性及其组合都不足以定位时,那么可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位. 1. ...
-
ConcurrentModificationException(并发修改异常)的解决
[异常解释] ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.[产生的原因] 迭代器是依赖于集合而存在的,在判断成功后,集合 ...
-
Implementing a Dispose method
[Implementing a Dispose method] 1.实现System.IDsiposable.Dispose()方法.不能将此方法设置为virtual,子类不能override此方法. ...
-
判断是否为SIM卡联系人
判断是否为SIM卡联系人 在AsyncQueryContacts类中. private List<TxrjAccount> accounts = new ArrayList<Txrj ...