在向数据库添加新数据时,需要检测是否有重复
本例介绍如何把这个检测的过程放在存储过程中,并用程序调用检测的结果做出反应。
例如在向数据库添加新数据时,需要检测是否有重复
本例介绍如何把这个检测的过程放在存储过程中,并用程序调用检测的结果做出反应。
存储过程如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
点击展开
1
CREATE PROCEDURE DInstitute_Insert
2
@InstituteNO nvarchar(6),@InstituteName nvarchar(40)
3
AS
4
declare @return int,@count int
5
if(ltrim(rtrim(@InstituteName))='' or ltrim(rtrim(@InstituteNO))='')
6
select @return=3--返回3表示提交的数据有空值
7
else
8
begin
9
select @count=count(1) from DInstitute where InstituteNO=@InstituteNO
10
if(@count>0)
11
select @return=1--返回1表示编号有重复
12
else
13
begin
14
insert into DInstitute (InstituteNO,InstituteName) values (@InstituteNO,@InstituteName)
15
if(@@error>0)
16
select @return=2--返回2表示数据操作错误
17
else
18
select @return=0--返回0表示数据操作成功
19
end
20
end
21
return @return
22
GO
其中DInstitute 是一个学院信息表。只有InstituteNO(学院编号)、InstituteName(学院名称)两个字段。
在C#中调用本存储过程的代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
CODE
1
//执行插入操作
2
SqlCommand com1 = new SqlCommand("DInstitute_Insert", DBcon);
3
if (com1.Connection.State == ConnectionState.Closed)
4
com1.Connection.Open();
5
com1.CommandType = CommandType.StoredProcedure;
6
com1.Parameters.Add(new SqlParameter("@InstituteNO",SqlDbType.NVarChar,6));
7
com1.Parameters.Add(new SqlParameter("@InstituteName", SqlDbType.NVarChar, 40));
8
com1.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
9
com1.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
10
com1.Parameters["@InstituteNO"].Value = t_NO.Text;
11
com1.Parameters["@InstituteName"].Value = t_name.Text;
12
try
13![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
14
com1.ExecuteScalar();
15
}
16
catch(SqlException ee)
17![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
18
DB.msgbox("操作失败!"+ee.Message.ToString());
19
return;
20
}
21
finally
22![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
23
com1.Connection.Close();
24
}
25
string temp = com1.Parameters["@return"].Value.ToString();
26
//返回0表示数据操作成功
27
//返回1表示编号有重复
28
//返回2表示数据操作错误
29
//返回3表示提交的数据有空值
30
switch (temp)
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
32
case "0":
33
DB.msgbox("添加成功!");
34
break;
35
case "1":
36
DB.msgbox("编号有重复!");
37
break;
38
case "2":
39
DB.msgbox("数据操作错误!");
40
break;
41
case "3":
42
DB.msgbox("提交的数据有空值!");
43
break;
44
}
45
Binding(); //刷新datagrid
2007-01-10 14:22 by
return 只能返回int型
可以用output参数