天天看點

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