天天看点

c# 调用 sqlserver 存储过程(非常完美流程简单)

                                                    相信我很简单,按照步骤执行下去,你将收获很多。

准备条件1:

在sqlserver数据库中执行创建表::
USE [NavyMasterDataBase]
GO

/****** Object:  Table [dbo].[navy_table]    Script Date: 2018/8/31 15:11:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[navy_table](
	[navy_ID] [int] NULL,
	[NAME] [varchar](50) NULL,
	[AGE] [nchar](10) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO
           

创建了表名为[navy_table]后

创建一个存储过程,点击执行即可:

use NavyMasterDataBase
go
create proc myclass
    @Name varchar(30)
as
    insert into navy_table(navy_ID,NAME,AGE)values (2,@Name,'a')
go
           

请将use后的名字改为当前你的数据库名称,存储过程是在这个数据库下创建的。

myclass是你的存储过程名称。

以上语句的意思是定义了一个name 变量,每执行一次这个存储过程,插入一条数据在到 navy_table 表中。

转到vs中:

创建连接数据库语句

<connectionStrings>
       <add name="Sql" connectionString="server=.;uid=sa;pwd=123456;database=NavyMasterDataBase"/> 
  </connectionStrings>
           

创建一个sqlHerpler类:

public class SqlHepler
    {
        //1.接着需要创建一个名为SqlHepler类,然后创建一个方法来获取app.config文件中配置的连接字符串。
        public static string GetSqlConnctingString()
        {
            return ConfigurationManager.
          ConnectionStrings["Sql"].ConnectionString;
        }

        //2.下面来封装第一个SqlHepler方法,封装一个执行的sql 返回受影响的行数。
        public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters)
        {
            using (SqlConnection conn=new SqlConnection(GetSqlConnctingString()))
            {
                using (SqlCommand cmd=conn.CreateCommand())
                {
                    conn.Open();
                    cmd.CommandText = sqlText;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        //3.继续封装一个查询操作,返回查询结果中的第一行第一列的值
        public static object ExecuteScalar(string sqlText,params SqlParameter[] parameters)
        {
            using (SqlConnection conn=new SqlConnection(GetSqlConnctingString()))
            {
                using (SqlCommand cmd=conn.CreateCommand())
                {
                    conn.Open();
                    cmd.CommandText = sqlText;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }
        //4.在封装个常用的查询方法,返回一个DataTable
        public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters)
        {
            using (SqlDataAdapter adapter=new SqlDataAdapter(sqlText,GetSqlConnctingString()))
            {
                DataTable dt = new DataTable();
                adapter.SelectCommand.Parameters.AddRange(parameters);
                adapter.Fill(dt);
                return dt;
            }
        }
        //5.最后在写封装一个查询方法,该方法返回的是一个SqlDataReader类型
        public static SqlDataReader ExecuteReader(string sqlText,params SqlDataReader[] parameters)
        {
            //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
              SqlConnection conn = new SqlConnection(GetSqlConnctingString());//不要释放连接,因为后面还需要连接打开状态
              SqlCommand cmd = conn.CreateCommand();
              conn.Open();
              cmd.CommandText = sqlText;
              cmd.Parameters.AddRange(parameters);
              //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
              return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }


            //6.调用存储过程
            public static DataTable StoredProcedure(string name,string value)
        { 
            SqlConnection conStr = new SqlConnection(GetSqlConnctingString());
            SqlCommand comStr = new SqlCommand(name, conStr);
            comStr.CommandType = CommandType.StoredProcedure; 
            
            comStr.Parameters.Add("@Name", SqlDbType.Text).Value = value;
            conStr.Open();//打开数据库连接
            SqlDataAdapter sqlData = new SqlDataAdapter(comStr);
            DataTable dt = new DataTable();
            sqlData.Fill(dt);
            return dt;
            //conStr.Close();//关闭连接 
        }
    }
           

   上面的6.调用存储过程是我设计的。

创建一个控制台应用程序:

static void Main(string[] args)
        { 
            string myclass = "myclass";
            Gerts(myclass);
            Console.ReadKey();
        }
        public static void Gerts(string name)
        {
            List<string> list = new List<string>();
            list.Add("lishuo");
            list.Add("jianzhen");
            list.Add("yangsu");
            list.Add("uigip");
            list.Add("zhongyu");
            for (int i = 0; i < list.Count; i++)
            {
                SqlHepler.StoredProcedure(name, list[i]);
            }
        }
           

写了一个集合存储数据,多次调用存储过程,像新建的表中插入数据。

好了,存储过程写完了,很简单的存储过程。

下面你需要学习复杂的存储过程,以及优化,上面我多次调用存储过程多次连接数据库你是否想到了优化的方法呢?如果想到了请留言!

                                                                                                                                                               2018-8-31 navy_master