• 用Sqlhelper类简化数据访问示例


    一、 建立示例数据库

    在Microsoft SQL Server Express 2005中建立数据库TstSqlhelper。

    1、 数据表TstStu结构:

     

    (图2 :数据表TstStu结构,Id设为主键)

    2、 存储过程:

    1)ALTER PROCEDURE TstSelect

            @Name nvarchar(8)

    AS

            select TstStu.Name,TstStu.Chinese from TstStu where TstSTu.Name=@Name

    RETURN

    2)ALTER PROCEDURE TstInsert

           @Id nvarchar(4),@Name nvarchar(8),@Sex nvarchar(2),@Chn float

    AS

            Insert Into TstStu(TstStu.Id,TstStu.Name,TstStu.Sex,TstStu.Chinese)

                Values(@Id,@Name,@Sex,@Chn)

       RETURN

    3)ALTER PROCEDURE TstUpdate

            @Id nvarchar(4),@Chn float

    AS

            update TstStu set TstStu.Chinese=@Chn  where TstStu.Id=@Id

      RETURN

    4) ALTER PROCEDURE TstDelete 

            @Id nvarchar(4)

    AS

             delete from TstStu  where TstStu.Id=@Id

      RETURN

    二、 建立示例程序:

    在Microsoft Visual Studio.Net 2005中建立一个网站项目WebSite2,在App_Data中添加TstSqlhelper数据库文件,App_Code中添加Sqlhelper.cs,在web.config中建立数据库连接字符串




            Response.Write(Count.ToString());

    }

    这里调用的ExecuteScalar方法的原型是:

    ExecuteScalar(string connectionString, CommandType commandType, string commandText)

    作用是返回一个值,该值始终是该命令返回的第一行的第一列,这里我们返回输出了表TstStu中的

    记录数。

    在Sqlhelper类中与此方法类似的还有:

    ExecuteNonQuery。方法用于执行不返回任何行或值的命令,这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。 

    ExecuteReader方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。 

    ExecuteDataset方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。 

    ExecuteXmlReader方法返回 FOR XML 查询的 XML 片段。

    除此之外,Sqlhelper类中每种静态方法都提供了一组一致的重载,它们都支持不同的方法参数,开发人员可根据具体需要确定要传递连接、事务和不同的参数信息和方式。

    例如:

    protected void Button2_Click(object sender, EventArgs e)

        {

            // 测试ExecutDataset方法传递“存储过程”参数的示例,返回Name为“张三”的记录

    SqlParameter sp_Para1=new SqlParameter("@Name",SqlDbType.NVarChar);

            sp_Para1.Value="张三";

            GridView1.DataSource = SqlHelper.ExecuteDataset(ConnStr, "TstSelect", sp_Para1);

            GridView1.DataBind();

     }

    在开发数据库相关的应用程序时,我们常常使用的DataTable等对象中的数据行来操作数据库,为了简化这一过程,Sqlhelper类中为我们提供了一系列的相关操作方法:

    ExecuteNonQueryTypedParams 方法使用数据行而不是参数来执行非查询操作。 

    ExecuteDatasetTypedParams 方法使用数据行而不是参数来执行 DataSet 创建操作。 

    ExecuteReaderTypedParams 方法使用数据行而不是参数来返回数据读取器。 

    ExecuteScalarTypedParams 方法使用数据行而不是参数来返回标量。 

    ExecuteXmlReaderTypedParams 方法使用数据行而不是参数来执行 XmlReader。

    例如:

    protected void Button3_Click(object sender, EventArgs e)

        {

            // 测试ExecuteNonQueryTypedParams方法,将DataTable中的一行数据做为存储过程的参数,向表

    // TstStu中插入一条记录

    DataTable dt = new DataTable("mydt");

            dt.Columns.Add("Id", typeof(String));

            dt.Columns.Add("Name", typeof(String));

            dt.Columns.Add("Sex", typeof(String));

            dt.Columns.Add("Chn", typeof(Double));

            DataRow dr;

            dr = dt.NewRow();

            dr["Id"] = "C004";

            dr["Name"] = "马六";

            dr["Sex"] = "男";

            dr["Chn"] = 68;

            dt.Rows.Add(dr);

            SqlHelper.ExecuteNonQueryTypedParams(ConnStr, "TstInsert", dr);

            Page_Load(sender, e);  

      }

    这里调用的ExecuteNonQueryTypedParams方法的原型是:

    ExecuteNonQueryTypedParams(string connectionString, string spName, DataRow dataRow)

    其中spName是存储过程名。

     DataSet是ADO.NET中的一个核心组件,它的强大功能受到众多程序员的青睐,但对DataSet进行

    数据填充和用DataSet更新数据库也是比较烦琐的操作,而Sqlhelper类为我们提供的两个相关的静态方

    法,正好简化了DataSet的使用。

       protected void Button4_Click(object sender, EventArgs e)

        {

            // 测试FillDataset方法,查询Name是“李四”的记录

    DataSet ds = new DataSet();

            SqlHelper.FillDataset(ConnStr, "TstSelect", ds, new string[] { "TstStu" }, "李四");

            GridView1.DataSource = ds;

            GridView1.DataBind();

        }

       这里调用的FillDataset方法的原型是:

    FillDataset(string connectionString, string spName, DataSet dataSet,string[] tableNames, params object[] parameterValues)

     (注:参数string[] tableNames可以是多个表名,在此我们只使用了单表。)

      protected void Button5_Click(object sender, EventArgs e)

        {

            // 测试CreateCommand、UpdateDataset方法,将DataSet的数据更新提交到数据库

    DataSet ds = new DataSet();

            SqlHelper.FillDataset(ConnStr, CommandType.Text, "select * from TstStu",ds,

     new string[] { "TstStu" }); 填充DataSet

    DataRow rowToInsert, rowToUpdate, rowToDelete;

            // 插入一条记录

    rowToInsert = ds.Tables[0].Rows.Add(new Object[] {"C005", "陈七", "男", 92 });

            // 更新第二条记录,给Chinese字段加10

    rowToUpdate = ds.Tables[0].Rows[1];

            rowToUpdate["Chinese"] = (double)(rowToUpdate["Chinese"]) + 10.0;

            

            // 删除第三条记录

    rowToDelete = ds.Tables[0].Rows[2];

            rowToDelete.Delete();

            GridView1.DataSource = ds;

            GridView1.DataBind();

            // 手动建立更新逻辑

    SqlCommand InsertCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr),"TstInsert", "Id","Name", "Sex", "Chinese");

            SqlCommand DeleteCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr), "TstDelete", "Id");

    SqlCommand UpdateCmd = SqlHelper.CreateCommand(new SqlConnection(ConnStr), "TstUpdate", "Id", "Chinese");

            

            // 将DataSet的数据更新提交到数据库

            SqlHelper.UpdateDataset(InsertCmd, DeleteCmd, UpdateCmd, ds, "TstStu");

        }

        这里调用的CreateCommand方法的原型是:

        public static SqlCommand CreateCommand(SqlConnection connection, string spName, 

    params string[] sourceColumns)

          (注:这里的connection是连接对象而不是连接字符串,spName为存储过程名,sourceColumns是数组参数类型)

          UpdateDataset方法的原型是:

          public static void UpdateDataset(SqlCommand insertCommand, SqlCommand deleteCommand,

     SqlCommand updateCommand, DataSet dataSet, 

    string tableName)

    除以上示例提到的方法外,Sqlhelper类中还提供了一些数据访问操作的辅助函数,限于篇幅在此不再繁述,有兴趣的读者可阅读Sqlhelper.cs源码及参考相关资料。事实上,由于Sqlhelper类是开源的,我们在实际开发中完全可以根据需要对其进行修改和扩充,以进一步简化我们的数据访问操作。

    运行环境:Windows XP-sp2+Visual Studio.NET 2005+SQL Server 2005 Express
  • 相关阅读:
    imx6 关闭调试串口
    imx6 Image Vector Table (IVT)
    imx6 DDR_Stress_Test
    java安装1.8和1.7,报错:Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVers
    maven安装与环境变量配置
    14.商品添加功能
    MyBatis 接口的使用
    MyBatis 的缓存机制
    MyBatis 别名标签 & sql的复用
    MyBatis 多表查询
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1765436.html
Copyright © 2020-2023  润新知