用SQL Server数据库处理数据层错误

ZDNet软件频道 时间:2009-04-10 作者:Builder.com.cn Tony Patton | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库
与数据库进行交互操作的时候会发生很多错误,但是很多开发人员都不知道如何处理数据库层的错误。本文我们将探讨如何利用SQLServer和T-SQL来处理你数据库代码里的错误。

用存储过程返回值

通过存储过程返回值,我们可以把它用在我们的.net代码里。SQLCommand对象允许你很容易就添加参数传递给过程以及存储返回值。参数的Direction属性被用来接收来自存储过程调用的值。它有两个属性值:InputOutput和Output。在我们的例子里,我们将使用Output来接收状态值。

这段代码是一个简单的ASP.NET页面,用来传递一个用于Northwind数据库的客户表格里某个数据的新值。而id值事实上被保存在一个隐藏字段里,可以被轻易地传递给表单,但是这个字段是用来说明的。在文本字段输入的值被用更新数据库表格里的电话号码字段。

参数被添加给SQLCommand对象(它们必须精确地符合存储过程的参数值)。命令通过SQLCommand对象的ExecuteNonQuery方法被执行。一旦它已经被执行,返回的值可以通过参数来取回。

代码会检查返回的值(-1表示有问题),而消息会显示在一个Label控件里。此外,一个try/catch块被用来捕捉在与数据库进行交互操作过程中可能发生的任何致命错误。看看下面的代码:

<%@ Import Namespace="System.Data.SQLClient"%>
<%@ Import Namespace="System.Data" %>
<%@ Page language="C#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html><head>
<title>TechRepublic.com - Test</title>
</head><body>
<script language="C#" runat="server">
private SQLConnectionconn= null;
private SQLCommandcmd =null;
private String connString;
private intrvalue;
public void SubmitChanges() {
connString = "data source=localhost;uid=test;
pwd=test;initial catalog=Northwind";
try {
conn = new SQLConnection(connString);
cmd = new SQLCommand("sp_UpdateCustomERPhone", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@id", SQLDbType.NVarChar, 5);
cmd.Parameters["@id"].Value = lblID.Text;
cmd.Parameters.Add("@phone", SQLDbType.NVarChar, 24);
cmd.Parameters["@phone"].Value = txtPhone.Text;
cmd.Parameters.Add("@retvalue",System.Data.SQLDbType.Int);
cmd.Parameters["@retvalue"].Direction= ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
rvalue = (int)cmd.Parameters["@retvalue"].Value;
if (rvalue == -1) {
lblMessage.Text = "Database error duringupdate.";
lblMessage.Visible = True;
} else {
lblMessage.Text = "Data has been updated.";
lblMessage.Visible = True;
}
conn.Close();
} catch (SQLException ex) {
lblMessage.Text = "Error Accessing database:" + ex.ToString();
} catch (Exception ex) {
lblMessage.Text = "Exception: " + ex.ToString();
} finally {
if (conn.State == ConnectionState.Open){
conn.Close();
}
conn.Dispose();
} }
private void btnUpdatePhone_Click(object sender, 
System.EventArgs e) {
SubmitChanges();
}
</script>
<form id="frmTestUpdate"method="post" runat="server">
<asp:Label ID="lblMessage"Visible="False" 
runat="server"></asp:Label><br /><br />
<asp:Label ID="lblPhone"runat="server">New Number:</asp:Label>
<asp:TextBox ID="txtPhone"runat="server" /><br/><br />
<asp:Button ID="btnUpdatePhone"Text="Update"
 OnCommand="btnUpdatePhone_Click" 
runat="server" />
<asp:Label ID="lblID"Visible="False" 
runat="server">ALFKI</asp:Label>
</form></body></html>

Mssql

SQL

SQL Server

数据库


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134