程序中使用存储过程
来源:互联网 发布:网络信息安全培训总结 编辑:程序博客网 时间:2024/05/21 17:41
程序中有一种调用存储过程的标准方法:
{?=CALL MyStoredProc(?,?,?)}
最初的参数标记表示的是过程调用的返回值,如查不准备使用返回的值,也可以忽略它。去掉返回的参数后,查询语法变为如下形式:
{CALL GetCustomer(?)}
这种用法不依赖CommandType属性。如果想要查询一个名称中包含特殊字符(如空格)的表格 ,视图或是存储过程 ,那么在这样的情况下将CommandType属性设置 为TableDirect或是SoredProcedure,对象名称中的分隔符将无法识别。需要手动添加 分隔符。这并不适合于所有的Command对象。如,SqlComman对象可以自动 ,准确地确定 对象名称的间隔。当然,如果没有在表格及存储过程的名称中放置空格,那么就不要考虑这些问题。
Parameter对象有一个Direction属性,能接收ParameterDirection枚举类型中的值:ReturnValue,Input,InputOutput以及Output。属性默认值为Input。要想从该存储过程获取信息,需要对参数的Direction属性设置。
存储过程用返参数来表明成功或失败。
存储过程:
{?=CALL MyStoredProc(?,?,?)}
最初的参数标记表示的是过程调用的返回值,如查不准备使用返回的值,也可以忽略它。去掉返回的参数后,查询语法变为如下形式:
{CALL GetCustomer(?)}
这种用法不依赖CommandType属性。如果想要查询一个名称中包含特殊字符(如空格)的表格 ,视图或是存储过程 ,那么在这样的情况下将CommandType属性设置 为TableDirect或是SoredProcedure,对象名称中的分隔符将无法识别。需要手动添加 分隔符。这并不适合于所有的Command对象。如,SqlComman对象可以自动 ,准确地确定 对象名称的间隔。当然,如果没有在表格及存储过程的名称中放置空格,那么就不要考虑这些问题。
Parameter对象有一个Direction属性,能接收ParameterDirection枚举类型中的值:ReturnValue,Input,InputOutput以及Output。属性默认值为Input。要想从该存储过程获取信息,需要对参数的Direction属性设置。
存储过程用返参数来表明成功或失败。
try
{
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
DataTable table = new DataTable();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "{?=CALL GetCustomers(?,?,?,?)}";
cmd.Parameters.Add("@RetVal", SqlDbType.Int);
cmd.Parameters.Add("@CustomerID", SqlDbType.Char, 5);
cmd.Parameters.Add("@CompanyName", SqlDbType.VarChar, 40);
cmd.Parameters.Add("@ContactName", SqlDbType.VarChar, 30);
cmd.Parameters.Add("@ContactTitle", SqlDbType.VarChar, 30);
cmd.Parameters["@ContactTitle"].Direction = ParameterDirection.Output;
cmd.Parameters["@RetVal"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters["@CustomerID"].Value = "ALFKI";
cmd.Parameters["@CompanyName"].Direction = ParameterDirection.Output;
cmd.Parameters["@ContactName"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
if(Convert.ToInt32(cmd.Parameters["@RetVal"].Value)==0)
{
label1.Text=cmd.Parameters["@CompanyName"].Value.ToString();
}
{
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
DataTable table = new DataTable();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "{?=CALL GetCustomers(?,?,?,?)}";
cmd.Parameters.Add("@RetVal", SqlDbType.Int);
cmd.Parameters.Add("@CustomerID", SqlDbType.Char, 5);
cmd.Parameters.Add("@CompanyName", SqlDbType.VarChar, 40);
cmd.Parameters.Add("@ContactName", SqlDbType.VarChar, 30);
cmd.Parameters.Add("@ContactTitle", SqlDbType.VarChar, 30);
cmd.Parameters["@ContactTitle"].Direction = ParameterDirection.Output;
cmd.Parameters["@RetVal"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters["@CustomerID"].Value = "ALFKI";
cmd.Parameters["@CompanyName"].Direction = ParameterDirection.Output;
cmd.Parameters["@ContactName"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
if(Convert.ToInt32(cmd.Parameters["@RetVal"].Value)==0)
{
label1.Text=cmd.Parameters["@CompanyName"].Value.ToString();
}
CREATE PROCEDURE GetCustomers(@CustomerID nchar(5),
@CompanyName nvarchar(40) OUTPUT,
@ContactName nvarchar(30) OUTPUT,
@ContactTitle nvarchar(30) OUTPUT) AS
SELECT @CompanyName=CompanyName,@ContactName=ContactName,
@ContactTitle=ContactTitle
FROM Customers WHERE CustomerID=@CustomerID
IF @@ROWCOUNT=1
RETURN 0
ELSE
RETURN -1
@CompanyName nvarchar(40) OUTPUT,
@ContactName nvarchar(30) OUTPUT,
@ContactTitle nvarchar(30) OUTPUT) AS
SELECT @CompanyName=CompanyName,@ContactName=ContactName,
@ContactTitle=ContactTitle
FROM Customers WHERE CustomerID=@CustomerID
IF @@ROWCOUNT=1
RETURN 0
ELSE
RETURN -1
- 程序中使用存储过程
- 程序中存储过程的使用
- 在程序中使用存储过程
- ASP中使用存储过程
- ASP中使用存储过程
- VC中使用存储过程
- VC中使用存储过程
- PHP中使用存储过程
- java中使用存储过程
- 存储过程中使用事务
- asp中使用存储过程
- JDBC中使用存储过程
- mysql 中使用存储过程
- mysql 中使用存储过程
- mysql 中使用存储过程
- hibernate中使用存储过程
- C#中使用存储过程
- c#中使用存储过程
- ASPNET 控件开发
- 结束EXCEL进程
- IBatis教程目录
- Mplayer使用问题
- 用OpenInventor实现的NeHe OpenGL教程-第三十七课
- 程序中使用存储过程
- 什么是IBatis
- STRUTS中ActionMessage、ActionMessages、saveMessages()、saveErrors()、之间的关系及用法
- 随机的世界
- kmp算法
- VC里对画图设备的调用的几种方法!!
- 一个极帅的Mac风格的Flex弹出窗口实例
- 2008-5-18
- TortoiseSVN:Subversion客户端