您现在的位置是: 首页 > .NET开发 > 文章详情 文章详情
c#调用存储过程的几种方式
2024-06-29 【.NET开发】 157人浏览
简介连接与关闭数据库 为了访问数据库,就要提供数据库连接类,在C#中是通过Connection类来实现的。它有4种类型的连接方式: SQLConnection,ADOConnection,OracleConnection,ODBCConnection 这里只介绍连接SqlServer数据库的步骤: (1
连接与关闭数据库
为了访问数据库,就要提供数据库连接类,在C#中是通过Connection类来实现的。它有4种类型的连接方式:
SQLConnection,ADOConnection,OracleConnection,ODBCConnection
这里只介绍连接SqlServer数据库的步骤:
(1)引用命名空间System.Data.SqlClient
(2)将连接方法声明至字符串中
windows登录:
string constr = "Server=.;integrated security=SSPI;Initial Catalog=DB_TEST"; sqlserver登录:string constr1 = "Server=.;user=sa;pwd=find/-perm4000;database=DB_TEST";string constr2="Data Source=.;Initial Catalog=RYTreasureDB;User ID=sa;pwd=sa;Integrated Security=True"12345
(3)创建Connection对象
SqlConnection sqlConnection = new SqlConnection(constr); sqlConnection.Open();12
(4)调用
I.直接执行一条无参sql(update,delete,insert,或者exec)1
SqlCommand sqlCommand=new SqlCommand("update RecordInsure set ServerID=2 where RecordID=3534",sqlConnection);//执行该sql,返回受影响的行数(可以执行任意curd,若执行的select,不论是否有查询结果,均返回-1)int count=sqlCommand.ExecuteNonQuery();123
II.执行有参sql(update,delete,insert)1
SqlCommand sqlCommand=new SqlCommand("update RecordInsure set CollectNote=@param1 where RecordID=@param2",sqlConnection); SqlParameter[] sqlParameters={new SqlParameter("@param1","测试有参sql"),new SqlParameter("@param2",111)}; sqlCommand.Parameters.AddRange(sqlParameters);//受影响的行数int count=sqlCommand.ExecuteNonQuery();12345
III.执行有参select语句1
SqlCommand sqlCommand=new SqlCommand("select * from RecordInsure where RecordID=@param1",sqlConnection);//给参数@param1赋值10 sqlCommand.Parameters.AddWithValue("@param1",10);DataSet ds=new DataSet();SqlDataAdapter sda=new SqlDataAdapter(sqlCommand); sda.Fill(ds);123456
IV.调用无参、无输出参数、无返回值、无查询结果集的存储过程1
SqlCommand sqlCommand=new SqlCommand("spTest1",sqlConnection); sqlCommand.CommandType=CommandType.StoredProcedure;//执行该sp,这里不再能反应影响的行数,始终返回-1int count=sqlCommand.ExecuteNonQuery();12345
V.调用有参、无输出参数、无返回值、无查询结果集的存储过程1
SqlCommand sqlCommand=new SqlCommand("spTest2",sqlConnection); sqlCommand.CommandType=CommandType.StoredProcedure; SqlParameter[] sqlParameters={new SqlParameter("@param1",100),new SqlParameter("@param2","调用了有参的存储过程")} sqlCommand.Parameters.AddRange(sqlParameters); sqlCommand.ExecuteNonQuery();12345
VI.调用有参、有输出参数、无返回值、无查询结果集的存储过程1
SqlCommand sqlCommand=new SqlCommand("spTest3",sqlConnection); sqlCommand.CommandType=CommandType.StoreProcedure; SqlParameter[] sqlParameters={new SqlParameter("@param1",101),new SqlParameter("@param2","调用了有参有输出参数的存储过程")}//输出参数单独设置,参数类型为varchar,长度为100SqlParameter paramOutput=new SqlParameter("@param3",SqlDbType.VarChar,100); paramOutput.Direction=ParameterDirection.Output; sqlCommand.Parameters.AddRange(sqlParameters); sqlCommand.Parameters.Add(paramOutput); sqlCommand.ExecuteNonQuery();//打印存储过程返回的输出参数 Console.WriteLine(paramOutput.value);1234567891011
VII.调用有参、有输出参数、有返回值、无查询结果集的存储过程1
SqlCommand sqlCommand=new SqlCommand("spTest4",sqlConnection); sqlCommand.CommandType=CommandType.StoredProcedure; SqlParameter[] sqlParameters={new SqlParameter("@param1",102),new SqlParameter("@param2","调用了有参有输出参数有返回值的存储过程")}//输出参数单独设置,参数类型为varchar,长度为100SqlParameter paramOutput=new SqlParameter("@param3",SqlDbType.VarChar,100); paramOutput.Direction=ParameterDirection.Output;//返回值参数单独设置,参数名可任意指定(存储过程也不要求参数名一致)SqlParameter returnParam = new SqlParameter("@returnValue", SqlDbType.VarChar); returnParam.Direction = ParameterDirection.ReturnValue; sqlCommand.Parameters.AddRange(sqlParameters); sqlCommand.Parameters.Add(paramOutPut); sqlCommand.Parameters.Add(returnParam); sqlCommand.ExecuteNonQuery(); //打印输出参数和返回值 Console.WriteLine(paramOutPut.Value); Console.WriteLine(returnParam.Value);12345678910111213141516
VIII.调用有查询结果集的存储过程(前面的省略,不再说明)1
SqlCommand sqlCommand=new SqlCommand("spTest5",sqlConnection); sqlCommand.CommandType=CommandType.StoredProcedure; SqlDataAdapter sda = new SqlDataAdapter(sqlCommand); DataSet ds = new DataSet(); sda.Fill(ds); sqlConnection.Close(); DataTable dt = ds.Tables[0]; //遍历DataTable //获取字段名称 DataColumnCollection dcc = dt.Columns; for(int i=0;i< dcc.Count; i++) { Console.Write(dcc[i].Caption+"\t"); } Console.WriteLine(); //获取行记录 DataRowCollection drc = dt.Rows; for(int i=0;i<drc.Count;i++) { for(int j=0;j<dcc.Count;j++) { Console.Write(drc[i][j]+"\t"); } Console.WriteLine(); }12345678910111213141516171819202122232425
(5)调用结束
sqlConnection.Close();1
很赞哦! (0)