2005-12-07堕落了!没有学习太多~只是在看没有动手实践,没有什么心得!所以和08号的学习总结一起写!
学习的知识点:
重点学习了C#.net中对存储过程的简单调用通过三种不同的方法来实现了对存储过程
的调用。还有对创建存储过程有一定的感性认识。
心得:
创建存储过程:
只初步了解了下格式和最简单的语法!发现很多需要解决的问题!
调用存储过程:
总体上看三种方法分别运用的类库方法都不太一样。但这三者实质上是共同之处!
他们都是首先要获得存储过程名,和通知编译器Command.Type类型是存储过程!
然后三者通过自身不同的方法来对SqlParameter进行操作把存储过程的参数传递过去和接受回来!
不足:
对Transact-SQL语言陌生!很多的名词术语都没有理解!在调用存储过程传递参数时不知道如何一次传递和接受多个参数~!有待提高
创建存储过程:
CREATE PROCEDURE dbo.usp_Test
@ID int,
@UserName varchar(50) output
as
select @UserName=(select UserName from UserInfo where UserID=@ID)
select UserName from UserInfo where UserID=@ID
GO
心得:
明白了基本的书写格式~!
不足:
对Transact-SQL语言陌生!不能更深入的写出复杂的存储过程
调用存储过程:
1."用了SqlDataAdapter的方法直接操作"
da=new SqlDataAdapter("usp_UserInfo", Conn);
da.SelectCommand.CommandText="usp_Test";
da.SelectCommand.CommandType=CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@ID",SqlDbType.Int));
da.SelectCommand.Parameters.Add(new SqlParameter("@UserName",SqlDbType.VarChar,50));
da.SelectCommand.Parameters["@UserName"].Direction =ParameterDirection.Output;
da.SelectCommand.Parameters["@ID"].Value =1;
ds=new DataSet();
da.Fill(ds,"UserInfo");
this.DataGrid1.DataSource=ds.Tables["UserInfo"];
this.TextBox2.Text=da.SelectCommand.Parameters["@UserName"].Value.ToString();
Conn.Close();
2. "用了SqlDataAdapter和SqlParameter联合操作"
da=new SqlDataAdapter();
da.SelectCommand=new SqlCommand ();
da.SelectCommand.Connection= Conn;
da.SelectCommand.CommandText="usp_Test";
da.SelectCommand.CommandType=CommandType.StoredProcedure;
pram=new SqlParameter("@ID",1);
pram.Direction=ParameterDirection.Input ;
//pram.Value=Convert.ToInt32(2);
da.SelectCommand.Parameters.Add(pram);
pram=new SqlParameter("@UserName",SqlDbType.VarChar,50);
pram.Direction=ParameterDirection.Output ;
da.SelectCommand.Parameters.Add(pram);
ds=new DataSet();
da.Fill(ds,"UserInfo");
this.DataGrid1.DataSource=ds.Tables["UserInfo"];
this.TextBox2.Text=da.SelectCommand.Parameters["@UserName"].Value.ToString();
Conn.Close();
3."用SqlCommand操作和SqlParameter联合操作"
cmds=new SqlCommand("usp_Test", Conn);
cmds.Connection.Open();
cmds.CommandType=CommandType.StoredProcedure;
cmds.Parameters.Add("@ID",2);
pram=cmds.Parameters.Add("@UserName",SqlDbType.VarChar,50);
pram.Direction=ParameterDirection.Output;
cmds.ExecuteNonQuery();
//this.TextBox2.Text=pram.Value.ToString(); 此语句与下语句等效
this.TextBox1.Text=cmds.Parameters["@UserName"].Value.ToString();
this.DataGrid1.DataSource=cmds.ExecuteReader();
this.DataGrid1.DataBind();
心得:
在编程的时候得充分理解语句意思,每写出一条语句一定要有发散思维的能力,比如:
cmds.Parameters.Add("@ID",2);
cmds.Parameters.Add("@ID",SqlDbType.int)
这两语句的第二个参数有所不同,第一个是给@ID变量赋值,第二个只是说明了@ID变量的类型要赋值需改为:
SqlParameter pram;
pram=cmds.Parameters.Add("@ID",SqlDbType.int)
pram.Value=Convert.ToInt32(2);
这二者之间有何实质的区别有待研究
不足:
感觉自己对SqlDataAdapter ,SqlParameter, SqlCommand, DataSet 这几个的方法属性还是不能灵活运用和对他们深层次的理解!
总结:
今天只是对存储过程的一个入门有很多深层实用的东西还没有理解!在实际运用方面还有很大的一定距离! 需要更加的努力~!现在急需解决的问题:
1.对Transact-SQL语言陌生!!!
2.SqlDataAdapter ,SqlParameter, SqlCommand, DataSet 这几个的方法属性还是不能灵活运用和对他们深层次的理解!