c#讲课教案.docx
- 文档编号:26353229
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:15
- 大小:34.69KB
c#讲课教案.docx
《c#讲课教案.docx》由会员分享,可在线阅读,更多相关《c#讲课教案.docx(15页珍藏版)》请在冰豆网上搜索。
c#讲课教案
c#
C#.net是怎么使用存储过程的,来几句简单明了的代码?
1.构造与Sql服务器连接对象
2.SqlConnectionMyCon=newSqlConnection()
3.
4.2.构造SqlCommand对象
5.SqlCommandMyCmd=newSqlCommand()
6.
7.3.指定SqlCommand对象调用的存储过程
8.MyCmd.CommandText="ProcedureName"
9.ProcedureName是Sql数据库中实际存在的存储过程名
10.
11.4.声明SqlCommand对象的命令类型为存储过程
12.MyCmd.CommandType=CommandType.StoredProcedure
13.
14.5.构造参数对象
15.SqlParameterMyParam=newSqlParameter("@ParamName",类型,宽度);
16.@ParamName:
是调用存储过程的参数,参数名必需和现有的存储过程一致
17.类型:
SqlDbType.Char字符型,C#中用SqlDbType存储了Sql数据类型
18.宽度:
类型字宽.如char(15)
19.
20.6.赋值给参数对象
21.MyParam.Value=Value
22.
23.7.将参数添加到SqlCommand对象
24.MyCmd.Parameters.Add(MyParam)
25.
26.8.打开Sql连接对象
27.MyCon.Open()
28.
29.9.执行SqlCommand
30.MyCmd.ExecuteNonQuery()
31.
32.10.关闭Sql连接对象
33.MyCon.Close()
有多种方法使用ADO.NET调用存储过程并获得返回值和返回参数,其中包括:
∙使用DataSet对象,在获得返回值和返回参数之外,还可以收集并使用返回的数据行。
∙使用DataReader对象收集返回的行,遍历这些行,然后收集返回值和返回参数。
∙使用ExecuteScalar方法返回结果中第一行的第一列的值以及返回值和返回参数。
这对于聚合函数特别有用。
∙使用ExecuteNonQuery方法只返回参数和值。
任何返回的行都将被丢弃。
这对于执行操作查询特别有用。
使用DataReader返回行和参数
您可以使用DataReader对象返回只读的仅向前型数据流。
DataReader中所包含的信息可以来自一个存储过程。
本示例使用DataReader对象运行带有输入和输出参数的存储过程,然后遍历返回记录,以查看返回参数。
1.在运行MicrosoftSQLServer的服务器上创建下面的存储过程:
2.CreateProcedureTestProcedure
3.(
4.@au_idINvarchar(11),
5.@numTitlesOUTIntegerOUTPUT
6.)
7.AS
8.
9.selectA.au_fname,A.au_lname,T.title
10.fromauthorsasAjointitleauthorasTAon
11.A.au_id=TA.au_id
12.jointitlesasT
13.onT.title_id=TA.title_id
14.whereA.au_id=@au_idIN
15.set@numTitlesOUT=@@Rowcount
16.return(5)
17.用以下代码替换privateForm_Load事件中的代码:
SQL客户端
18.SqlConnectionPubsConn=newSqlConnection
19.("DataSource=server;integrated"+
20."Security=sspi;initialcatalog=pubs;");
21.SqlCommandtestCMD=newSqlCommand
22.("TestProcedure",PubsConn);
23.
24.testCMD.CommandType=CommandType.StoredProcedure;
25.
26.SqlParameterRetVal=testCMD.Parameters.Add
27.("RetVal",SqlDbType.Int);
28.RetVal.Direction=ParameterDirection.ReturnValue;
29.SqlParameterIdIn=testCMD.Parameters.Add
30.("@au_idIN",SqlDbType.VarChar,11);
31.IdIn.Direction=ParameterDirection.Input;
32.SqlParameterNumTitles=testCMD.Parameters.Add
33.("@numtitlesout",SqlDbType.VarChar,11);
34.NumTitles.Direction=ParameterDirection.Output;
35.
36.IdIn.Value="213-46-8915";
37.PubsConn.Open();
38.
39.SqlDataReadermyReader=testCMD.ExecuteReader();
40.Console.WriteLine("BookTitlesforthisAuthor:
");
41.while(myReader.Read())
42.{
43.Console.WriteLine("{0}",myReader.GetString
(2));
44.};
45.myReader.Close();
46.Console.WriteLine("NumberofRows:
"+NumTitles.Value);
47.Console.WriteLine("ReturnValue:
"+RetVal.Value);
48.修改Connection对象的连接字符串,以便指向运行SQLServer的计算机。
49.运行上述代码。
注意,DataReader检索记录并返回参数值。
可以使用DataReader对象的Read方法遍历返回的记录。
50.
51.“输出”窗口显示两本书的标题、返回值5和输出参数,其中包含记录的数目
(2)。
注意,必须关闭代码中的DataReader才能看到参数值。
另外还要注意,如果关闭了DataReader,则不必为了查看返回参数而遍历所有记录
使用Command对象的ExecuteScalar方法
可以使用Command对象的ExecuteScalar方法检索参数值。
另外,ExecuteScalar返回该存储过程的第一行的第一列。
这对于聚合函数特别有用,如下例所示。
1.在运行SQLServer的服务器上创建下面的存储过程:
2.CreateProcedureTestProcedure2
3.(
4.@au_idINvarchar(11)
5.)
6.As
7./*setnocounton*/
8.selectcount(T.title)
9.fromauthorsasAjointitleauthorasTAon
10.A.au_id=TA.au_id
11.jointitlesasT
12.onT.title_id=TA.title_id
13.whereA.au_id=@au_idIN
14.Return(5)
15.新建一个新的VisualC#.NETWindows应用程序项目。
16.对System和System.Data命名空间使用using语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。
将此代码添加到“窗体”代码模块的顶部。
请确保只复制对应于您所选的提供程序的代码。
SQL客户端
17.usingSystem.Data.SqlClient;
18.将下面的代码添加到Form_Load事件:
SQL客户端
19.stringstrCount;
20.SqlConnectionPubsConn=newSqlConnection
21.("DataSource=server;integrated"+
22."Security=sspi;initialcatalog=pubs;");
23.SqlCommandtestCMD=newSqlCommand
24.("TestProcedure2",PubsConn);
25.
26.testCMD.CommandType=CommandType.StoredProcedure;
27.
28.SqlParameterRetVal=testCMD.Parameters.Add
29.("RetVal",SqlDbType.Int);
30.RetVal.Direction=ParameterDirection.ReturnValue;
31.SqlParameterIdIn=testCMD.Parameters.Add
32.("@au_idIN",SqlDbType.VarChar,11);
33.IdIn.Direction=ParameterDirection.Input;
34.
35.IdIn.Value="213-46-8915";
36.
37.PubsConn.Open();
38.
39.strCount=testCMD.ExecuteScalar().ToString();
40.
41.Console.WriteLine("NumberofRows:
"+strCount);
42.Console.WriteLine("ReturnValue:
"+RetVal.Value);
43.修改Connection对象的连接字符串,以便指向运行SQLServer的计算机。
44.运行上述代码。
注意,Command对象的ExecuteScalar方法将返回参数。
ExecuteScalar还将返回所返回的行集中的第一行第一列的值。
因此,intCount的值是存储过程的count函数的结果。
使用Command对象的ExecuteNonQuery方法
此示例使用ExecuteNonQuery方法运行查询并返回参数值。
ExecuteNonQuery还返回在运行此查询后受影响的记录数。
但是,ExecuteNonQuery不从该存储过程返回任何行或列。
如果只需要知道更改的行数,那么在使用INSERT、UPDATE或DELETE语句时,ExecuteNonQuery方法特别有用。
当存储过程中仅使用SELECT语句时,您将收到-1,因为查询不会影响任何行。
1.在运行SQLServer的计算机上创建下面的存储过程:
2.CreateProcedureTestProcedure3
3.(
4.@au_idINvarchar(11),
5.@au_fnamvarchar(30)
6.)
7.
8.As
9./*setnocounton*/
10.Updateauthorssetau_fname=@au_fnam
11.whereau_id=@au_idin
12.return(5)
13.新建一个新的VisualC#.NETWindows应用程序项目。
14.对System和System.Data命名空间使用using语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。
将此代码添加到“窗体”代码模块的顶部。
请确保只复制对应于您所选的提供程序的代码。
SQL客户端
15.usingSystem.Data.SqlClient;
16.用以下代码替换Form1代码模块中privateForm1_Load事件后面的代码:
SQL客户端
17.stringstrRowAffect;
18.SqlConnectionPubsConn=newSqlConnection
19.("DataSource=server;integratedSecurity=sspi;"+
20."initialcatalog=pubs;");
21.SqlCommandtestCMD=newSqlCommand
22.("TestProcedure3",PubsConn);
23.
24.testCMD.CommandType=CommandType.StoredProcedure;
25.
26.SqlParameterRetVal=testCMD.Parameters.Add
27.("RetVal",SqlDbType.Int);
28.RetVal.Direction=ParameterDirection.ReturnValue;
29.SqlParameterIdIn=testCMD.Parameters.Add
30.("@au_idIN",SqlDbType.VarChar,11);
31.IdIn.Direction=ParameterDirection.Input;
32.SqlParameterFnameIn=testCMD.Parameters.Add
33.("@au_fnam",SqlDbType.VarChar,30);
34.FnameIn.Direction=ParameterDirection.Input;
35.
36.IdIn.Value="213-46-8915";
37.FnameIn.Value="Marjorie";
38.
39.PubsConn.Open();
40.
41.strRowAffect=testCMD.ExecuteNonQuery().ToString();
42.
43.Console.WriteLine("NumberofRows:
"+strRowAffect);
44.Console.WriteLine("ReturnValue:
"+RetVal.Value);
1.修改Connection对象的连接字符串,以便指向运行SQLServer的计算机。
2.运行上述代码。
“输出”窗口显示受影响的行数(intRowAffect)和返回参数的
//======================================================================
//
// Copyright(C)2007-2008三月软件工作室
// Allrightsreserved
//
// filename:
Class4
// description:
//
// createdby侯垒at 03/09/200818:
41:
28
//
//
//======================================================================
有些人使用Copy和Paste的方式,这样即浪费时间,效果又不是很好,就说上面的时间你就无法去Paste,哈哈,下面我就教大家怎样去添加这些信息,使我们的代码更有个性.
1.在visualstudio2005的安装路径下
如:
[盘符]:
ProgramfilesMicrosoftVisualStudio8Common7IDEItemTemplatesCache
2.找到文件夹如图所示:
里面可以为各种语言进行修改.如果对WinForm中的类进行修改可以打开CSharp2052Class.zip.其中CSharp2052包括了所有WinForm文件类型的模板.
打开Class.zip里面有一个Class.cs文件,我们对其进行修改,当我们在WinForm中添加类文件的时候,类文件就会自动添加上我们的信息.
如下:
//======================================================================
//
// Copyright(C)2007-2008三月软件工作室
// Allrightsreserved
//
// filename:
$safeitemrootname$
// description:
//
// createdby侯垒at $time$
//
//
//======================================================================
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespace$rootnamespace$
{
class$safeitemrootname$
{
}
}
$rootnamespace$为生成类的命名空间的名字,$safeitemrootname$为生成类的类名.
可以看到我们在版权信息中加入了$time$,它就可以直接给我们加入创建的时间.我们可以对CSharp2052中所有的模板进行修改,切忌不要轻易修改系统那些代码,以免影响我们的正常的使用.
对于做Web开发的人员来说可以在ItemTemplatesCacheWebCSharp2052里进行修改.
新建一个类文件就可以实现了插入我们自定义的版权信息.
//======================================================================
//
// Copyright(C)2007-2008三月软件工作室
// Allrightsreserved
//
// filename:
NewClass
// description:
//
// createdby侯垒at 03/09/200820:
31:
56
//
//
//======================================================================
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
/**////
///NewClass的摘要说明
///
publicclassNewClass
{
publicNewClass()
{
//
//TODO:
在此处添加构造函数逻辑
//
}
}哈哈,是不是很酷呀!
赶快个性一下你的代码吧
1.比较时间大小的实验
2.stringst1="12:
13";
3.stringst2="14:
14";
4.DateTimedt1=Convert.ToDateTime(st1);
5.DateTimedt2=Convert.ToDateTime(st2);
6.DateTimedt3=DateTime.Now;
7.if(DateTime.Compare(dt1,dt2)>0)
8.msg.Text=st1+">"+st2;
9.else
10.msg.Text=st1+"<"+st2;
11.msg.Text+="\r\n"+dt1.ToString();
12.if(DateTime.Compare(dt1,dt3)>0)
13.msg.Text+="\r\n"+st1+">"+dt3.ToString();
14.else
15.msg.Text+="\r\n"+st1+"<"+dt3.ToString();
16.
17.2。
计算两个时间差值的函数,返回时间差的绝对值:
18.privatestringDateDiff(DateTimeDateTime1,DateTimeDateTime2)
19.{
20.stringdateDiff=null;
21.try
22.{
23.TimeSpants1=newTimeSpan(DateTime1.Ticks);
24.TimeSpants2=newTimeSpan(DateTime2.Ticks);
25.TimeSpants=ts1.Subtract(ts2).Duration();
26.dateDiff=ts.Days.ToString()+"天"
27.+ts.Hours.ToString()+"小时"
28.+ts.Minutes.ToString()+"分钟"
29.+ts.Seconds.ToString()+"秒";
30.}
31.catch
32.{
33.
34.}
35.returndateDiff;
36.}
37.
38.3。
实现计算DateTime1-36天=Da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 讲课 教案