VB.net 2010 视频教程 VB.net 2010 视频教程 VB.net 2010 视频教程
当前位置:
主页 > 编程开发 > c#教程 >
  • c#教程之C# .net 是怎么使用 存储过程的

  • 2016-02-20 14:39 来源:未知

C# .net 是怎么使用 存储过程的,来几句简单明了的代码?

1.     构造与Sql服务器连接对象
SqlConnection MyCon = new SqlConnection()

2.构造SqlCommand对象
SqlCommand MyCmd = new SqlCommand()

3.指定SqlCommand对象调用的存储过程
MyCmd.CommandText = "ProcedureName"
ProcedureName是Sql数据库中实际存在的存储过程名

4.声明SqlCommand对象的命令类型为存储过程
MyCmd.CommandType = CommandType.StoredProcedure

5.构造参数对象
SqlParameter MyParam = new SqlParameter("@ParamName",类型,宽度);
@ParamName:是调用存储过程的参数,参数名必需和现有的存储过程一致
类型:SqlDbType.Char字符型,C#中用SqlDbType存储了Sql数据类型
宽度:类型字宽.如char(15)

6.赋值给参数对象
MyParam.Value = Value

7.将参数添加到SqlCommand对象
MyCmd.Parameters.Add(MyParam)

8.打开Sql连接对象
MyCon.Open()

9.执行SqlCommand
MyCmd.ExecuteNonQuery()

10.关闭Sql连接对象
MyCon.Close()
 
 
 
 
 
 
 
 
 
有多种方法使用 ADO.NET 调用存储过程并获得返回值和返回参数,其中包括:
·         使用 DataSet 对象,在获得返回值和返回参数之外,还可以收集并使用返回的数据行。
·         使用 DataReader 对象收集返回的行,遍历这些行,然后收集返回值和返回参数。
·         使用 ExecuteScalar 方法返回结果中第一行的第一列的值以及返回值和返回参数。这对于聚合函数特别有用。
·         使用 ExecuteNonQuery 方法只返回参数和值。任何返回的行都将被丢弃。这对于执行操作查询特别有用。
使用 DataReader 返回行和参数
您可以使用 DataReader 对象返回只读的仅向前型数据流。DataReader 中所包含的信息可以来自一个存储过程。本示例使用 DataReader 对象运行带有输入和输出参数的存储过程,然后遍历返回记录,以查看返回参数。
  1. 在运行 Microsoft SQL Server 的服务器上创建下面的存储过程:
  2. Create Procedure TestProcedure
  3. (
  4.  @au_idIN varchar (11),
  5. @numTitlesOUT Integer OUTPUT
  6. )
  7. AS
  8.  
  9. select A.au_fname, A.au_lname, T.title
  10. from authors as A join titleauthor as TA on
  11. A.au_id=TA.au_id
  12. join titles as T
  13. on T.title_id=TA.title_id
  14. where A.au_id=@au_idIN
  15. set @numTitlesOUT = @@Rowcount
  16. return (5)
 
  1. 用以下代码替换 private Form_Load 事件中的代码:SQL 客户端
  2. SqlConnection PubsConn = new SqlConnection
  3. ("Data Source=server;integrated " +
  4. "Security=sspi;initial catalog=pubs;");
  5. SqlCommand testCMD = new SqlCommand
  6. ("TestProcedure", PubsConn);
  7.  
  8. testCMD.CommandType = CommandType.StoredProcedure;
  9.  
  10. SqlParameter RetVal = testCMD.Parameters.Add
  11.    ("RetVal", SqlDbType.Int);
  12. RetVal.Direction = ParameterDirection.ReturnValue;
  13. SqlParameter IdIn = testCMD.Parameters.Add
  14.   ("@au_idIN", SqlDbType.VarChar, 11);
  15. IdIn.Direction = ParameterDirection.Input;
  16. SqlParameter NumTitles = testCMD.Parameters.Add
  17.    ("@numtitlesout", SqlDbType.VarChar, 11);
  18. NumTitles.Direction = ParameterDirection.Output ;
  19.        
  20. IdIn.Value = "213-46-8915";
  21. PubsConn.Open();
  22.  
  23. SqlDataReader myReader = testCMD.ExecuteReader();
  24. Console.WriteLine ("Book Titles for this Author:");
  25. while (myReader.Read())
  26.    {
  27.      Console.WriteLine ("{0}", myReader.GetString (2));
  28.    };
  29. myReader.Close() ;
  30. Console.WriteLine("Number of Rows: " + NumTitles.Value );
  31. Console.WriteLine("Return Value: " + RetVal.Value);
  32. 修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
  33. 运行上述代码。注意,DataReader 检索记录并返回参数值。可以使用 DataReader 对象的 Read 方法遍历返回的记录。

    “输出”窗口显示两本书的标题、返回值 5 和输出参数,其中包含记录的数目 (2)。注意,必须关闭代码中的 DataReader 才能看到参数值。另外还要注意,如果关闭了 DataReader,则不必为了查看返回参数而遍历所有记录
使用 Command 对象的 ExecuteScalar 方法
可以使用 Command 对象的 ExecuteScalar 方法检索参数值。另外,ExecuteScalar 返回该存储过程的第一行的第一列。这对于聚合函数特别有用,如下例所示。
  1. 在运行 SQL Server 的服务器上创建下面的存储过程:
  2. Create Procedure TestProcedure2
  3. (
  4.   @au_idIN varchar (11)
  5. )
  6. As
  7. /* set nocount on */
  8. select count (T.title)
  9. from authors as A join titleauthor as TA on
  10. A.au_id=TA.au_id
  11. join titles as T
  12. on T.title_id=TA.title_id
  13. where A.au_id=@au_idIN
  14. Return(5)
                                  
  1. 新建一个新的 Visual C# .NET Windows 应用程序项目。
  2. SystemSystem.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端
  3. using System.Data.SqlClient;
  4. 将下面的代码添加到 Form_Load 事件:SQL 客户端
  1. string strCount;
  2. SqlConnection PubsConn = new SqlConnection
  3.    ("Data Source=server;integrated " +
  4.    "Security=sspi;initial catalog=pubs;");
  5. SqlCommand testCMD = new SqlCommand
  6.    ("TestProcedure2", PubsConn);
  7.  
  8. testCMD.CommandType = CommandType.StoredProcedure;
  9.  
  10. SqlParameter RetVal = testCMD.Parameters.Add
  11.    ("RetVal", SqlDbType.Int);
  12. RetVal.Direction = ParameterDirection.ReturnValue;
  13. SqlParameter IdIn = testCMD.Parameters.Add
  14.    ("@au_idIN", SqlDbType.VarChar, 11);
  15. IdIn.Direction = ParameterDirection.Input;
  16.        
  17. IdIn.Value = "213-46-8915";
  18.  
  19. PubsConn.Open();
  20.  
  21. strCount =testCMD.ExecuteScalar ().ToString() ;
  22.  
  23. Console.WriteLine("Number of Rows: " + strCount );
  24. Console.WriteLine("Return Value: " + RetVal.Value);
  25. 修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
  26. 运行上述代码。注意,Command 对象的 ExecuteScalar 方法将返回参数。ExecuteScalar 还将返回所返回的行集中的第一行第一列的值。因此,intCount 的值是存储过程的 count 函数的结果。
使用 Command 对象的 ExecuteNonQuery 方法
此示例使用 ExecuteNonQuery 方法运行查询并返回参数值。ExecuteNonQuery 还返回在运行此查询后受影响的记录数。但是,ExecuteNonQuery 不从该存储过程返回任何行或列。

如果只需要知道更改的行数,那么在使用 INSERT、UPDATE 或 DELETE 语句时,ExecuteNonQuery 方法特别有用。当存储过程中仅使用 SELECT 语句时,您将收到 -1,因为查询不会影响任何行。
1.    在运行 SQL Server 的计算机上创建下面的存储过程:
2. Create Procedure TestProcedure3
3. (
4.   @au_idIN varchar (11),
5.   @au_fnam varchar (30)
6. )
7.  
8. As
9. /* set nocount on */
10.          Update authors set au_fname = @au_fnam
11.          where au_id = @au_idin 
12.          return (5)
                             
13. 新建一个新的 Visual C# .NET Windows 应用程序项目。
14. 对 SystemSystem.Data 命名空间使用 using 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。将此代码添加到“窗体”代码模块的顶部。请确保只复制对应于您所选的提供程序的代码。SQL 客户端
15.          using System.Data.SqlClient;
16. 用以下代码替换 Form1 代码模块中 private Form1_Load 事件后面的代码:SQL 客户端
  1. string strRowAffect;
  2. SqlConnection PubsConn = new SqlConnection
  3.    ("Data Source=server;integrated Security=sspi;" +
  4.    "initial catalog=pubs;");
  5. SqlCommand testCMD = new SqlCommand
  6.    ("TestProcedure3", PubsConn);
  7.  
  8. testCMD.CommandType = CommandType.StoredProcedure;
  9.  
  10. SqlParameter RetVal = testCMD.Parameters.Add
  11.    ("RetVal", SqlDbType.Int);
  12. RetVal.Direction = ParameterDirection.ReturnValue;
  13. SqlParameter IdIn = testCMD.Parameters.Add
  14.    ("@au_idIN", SqlDbType.VarChar, 11);
  15. IdIn.Direction = ParameterDirection.Input;
  16. SqlParameter FnameIn = testCMD.Parameters.Add
  17.    ("@au_fnam", SqlDbType.VarChar, 30);
  18. FnameIn.Direction = ParameterDirection.Input;
  19.  
  20. IdIn.Value = "213-46-8915";
  21. FnameIn.Value = "Marjorie";
  22.  
  23. PubsConn.Open();
  24.  
  25. strRowAffect =testCMD.ExecuteNonQuery ().ToString() ;
  26.  
  27. Console.WriteLine("Number of Rows: " + strRowAffect );
  28. Console.WriteLine("Return Value: " + RetVal.Value);
                             
  1. 修改 Connection 对象的连接字符串,以便指向运行 SQL Server 的计算机。
  2. 运行上述代码。“输出”窗口显示受影响的行数 (intRowAffect) 和返回参数的
//======================================================================
//
//    Copyright(C)2007-2008三月软件工作室  
//    Allrightsreserved
//
//    filename:Class4
//    description:
//
//    createdby侯垒at 03/09/200818:41:28
//    http://houleixx.cnblogs.com
//
//======================================================================
  有些人使用Copy和Paste的方式,这样即浪费时间,效果又不是很好,就说上面的时间你就无法去Paste,哈哈,下面我就教大家怎样去添加这些信息,使我们的代码更有个性.
  1.在visual studio 2005的安装路径下
  如:[盘符]:Program filesMicrosoft Visual Studio 8Common7IDEItemTemplatesCache
  2.找到文件夹如图所示:
  如何将自己的代码自动添加版权信息
  里面可以为各种语言进行修改.如果对WinForm中的类进行修改可以打开CSharp2052Class.zip.其中CSharp2052包括了所有WinForm文件类型的模板.
  打开Class.zip里面有一个Class.cs文件,我们对其进行修改,当我们在WinForm中添加类文件的时候,类文件就会自动添加上我们的信息.
  如下:
//======================================================================
//
//    Copyright (C) 2007-2008 三月软件工作室  
//    All rights reserved
//
//    filename :$safeitemrootname$
//    description :
//
//    created by 侯垒 at $time$
//    http://houleixx.cnblogs.com/
//
//======================================================================
using System;
using System.Collections.Generic;
using System.Text;
  
namespace $rootnamespace$
{
  class $safeitemrootname$
  {
  }
}
  $rootnamespace$为生成类的命名空间的名字,$safeitemrootname$为生成类的类名.
  可以看到我们在版权信息中加入了$time$,它就可以直接给我们加入创建的时间.我们可以对CSharp2052中所有的模板进行修改,切忌不要轻易修改系统那些代码,以免影响我们的正常的使用.
  对于做Web开发的人员来说可以在ItemTemplatesCacheWebCSharp2052里进行修改.
  新建一个类文件就可以实现了插入我们自定义的版权信息.
//======================================================================
//
//    Copyright (C) 2007-2008 三月软件工作室  
//    All rights reserved
//
//    filename :NewClass
//    description :
//
//    created by 侯垒 at 03/09/2008 20:31:56
//    http://houleixx.cnblogs.com/
//
//======================================================================
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
  
/**//// <summary>
/// NewClass 的摘要说明
/// </summary>
public class NewClass
{
  public NewClass()
  {
    //
    // TODO: 在此处添加构造函数逻辑
    //
  }
}哈哈,是不是很酷呀!赶快个性一下你的代码吧
1.比较时间大小的实验
string st1="12:13";
string st2="14:14";
DateTime dt1=Convert.ToDateTime(st1);
DateTime dt2=Convert.ToDateTime(st2);
DateTime dt3=DateTime.Now;
if(DateTime.Compare(dt1,dt2)>0)
msg.Text=st1+">"+st2;
else
msg.Text=st1+"<"+st2;
msg.Text+="\r\n"+dt1.ToString();
if(DateTime.Compare(dt1,dt3)>0)
msg.Text+="\r\n"+st1+">"+dt3.ToString();
else
msg.Text+="\r\n"+st1+"<"+dt3.ToString();

2
。计算两个时间差值的函数,返回时间差的绝对值:
private string DateDiff(DateTime DateTime1,DateTime DateTime2)
{
string dateDiff=null;
try
{
TimeSpan ts1=new TimeSpan(DateTime1.Ticks);
TimeSpan ts2=new TimeSpan(DateTime2.Ticks);
TimeSpan ts=ts1.Subtract(ts2).Duration();
dateDiff=ts.Days.ToString()+"
"
+ts.Hours.ToString()+"
小时"
+ts.Minutes.ToString()+"
分钟"
+ts.Seconds.ToString()+"
";
}
catch
{

}
return dateDiff;
}

3
。实现计算DateTime136天=DateTime2的功能

TimeSpan ts=new TimeSpan(40,0,0,0);
DateTime dt2=DateTime.Now.Subtract(ts);
msg.Text=DateTime.Now.ToString()+"-"+ts.Days.ToString()+"
\r\n";
msg.Text+=dt2.ToString();


本文来自于CSDN博客
DateTime2.Ticks
此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号