65.9K
CodeProject 正在变化。 阅读更多。
Home

适用于 C# 和 VB.NET 的 DAL 类和 Transact-SQL 生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.47/5 (26投票s)

2007 年 12 月 1 日

CPOL

2分钟阅读

viewsIcon

136770

downloadIcon

13790

自动生成与 SQL 数据库工作所需的类和存储过程

引言

此程序将帮助您编写必要的代码,用于执行应用程序数据层(Web 和 Windows 应用程序)的基本操作。此程序的功能是创建一个 DAL 类,以便轻松选择、操作和删除数据库记录。结果是数据库中每个表的简单类。结构在下面的示意图中描述。

背景

Screenshot - Diagram.jpg

Using the Code

类结构

  1. 属性
  2. Insert 方法
  3. Update 方法
  4. Delete 方法
  5. Select 方法

描述

  1. 这些生成的属性指示表的每个字段。您可以使用它们在应用程序中 getset

    private string ConnectionString;
    public City(string ConnStr)
    {
        ConnectionString = ConnStr;
    }
    
    private string m_Code;
    public string Code
    {
        get { return m_Code; }
        set { m_Code = value; }
    }
    
    private string m_Title;
    public string Title
    {
        get { return m_Title; }
        set { m_Title = value; }
    }
    
    private string m_Province_Code;
    public string Province_Code
    {
        get { return m_Province_Code; }
        set { m_Province_Code = value; }
    }
  2. 此方法使用生成的存储过程将记录 Insert 到数据库中。它将每个字段的给定值传递给该存储过程

    public void Insert(string Code , string Title , string Province_Code)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand("Insert_City", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue(@Code ,Code );
        cmd.Parameters.AddWithValue(@Title ,Title );
        cmd.Parameters.AddWithValue(@Province_Code ,Province_Code );
    
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch
        {}
        finally
        {
            if (conn.State==ConnectionState.Open)
            {
                conn.Close();
            }
            conn.Dispose();
            cmd.Dispose();
        }
    }

    您还可以使用 Insert 方法的第二个重载,以使用当前指定的属性插入记录。

  3. Update 方法使用生成的存储过程操作数据库中的记录。与上述类似,此方法使用给定的值调用正确的存储过程

     public void Update(string Code , string Title , string Province_Code)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand("Update_City", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue(@Code ,Code );
        cmd.Parameters.AddWithValue(@Title ,Title );
        cmd.Parameters.AddWithValue(@Province_Code ,Province_Code );
    
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch
        {}
        finally
        {
            if (conn.State==ConnectionState.Open)
            {
                conn.Close();
            }
            conn.Dispose();
            cmd.Dispose();
        }
    }
  4. 此方法使用生成的存储过程从数据库中删除记录。它获取键字段的值,并使用该值调用存储过程

    public void Delete(string ID)
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlCommand cmd = new SqlCommand("Delete_City", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue(@ID,ID);
    
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch
        {}
        finally
        {
            if (conn.State==ConnectionState.Open)
            {
                conn.Close();
            }
            conn.Dispose();
            cmd.Dispose();
        }
    }
  5. 使用此方法从表中选择一个记录集,以便以后在应用程序中使用。此方法使用生成的存储过程返回一个 dataset 对象

    private DataSet Select()
    {
        SqlConnection conn = new SqlConnection(ConnectionString);
        SqlDataAdapter cmd = new SqlDataAdapter("Select_City", conn);
        DataSet dts = new DataSet();
        try
        {
            conn.Open();
            cmd.Fill(dts);
            return dts;
        }
        catch
        {
            return null; 
        }
        finally
        {
            if (conn.State==ConnectionState.Open)
            {
                conn.Close();
            }
            conn.Dispose();
            cmd.Dispose();
        }
    }

SQL 事务

此程序可以生成 transact-SQL 以实现“胖服务器和瘦客户端”的优秀方法。以下是我们要讨论的生成的代码

  1. Insert

    CREATE PROCEDURE [insert_City]
    (
        @Code        [int],
        @Title        [nvarchar](50),
        @Province_Code    [int]
    )
    AS INSERT INTO City
    (
        Code,
        Title,
        Province_Code
    )
    VALUES
    (
        @Code,
        @Title,
        @Province_Code
    )
  2. 更新

    CREATE PROCEDURE [update_City]
    (
        @Code            [int],
        @Title            [nvarchar](50),
        @Province_Code        [int]
    )
    AS UPDATE City
    SET
        Code        =    @Code,
        Title        =    @Title,
        Province_Code    =    @Province_Code
    WHERE
    (
        ID=@ID
    )
  3. 删除

    CREATE PROCEDURE [delete_City]
        (@ID     [int])
    AS 
    DELETE [City]
    WHERE
        ([ID]     = @ID)
  4. Select

    CREATE PROCEDURE [Select_City]
    AS 
    SELECT    [ID],
        [Code],
        [Title],
        (Select Title FROM Province WHERE Code=Province_Code) as Province
    FROM
        City  

应用程序手册

Screenshot - LogIn.jpg

运行程序后,您必须在登录表单中选择目标数据库以生成所需的存储过程。

登录后,您会看到如上图所示的主窗体。

Screenshot - Program_copy.jpg

左侧区域

  1. 数据库结构包含所有表及其字段。您可以右键单击每个表,然后从上下文菜单中选择所需的项以查看 DAL 类或相关的存储过程。

内容区域

  1. 您在此窗口中看到生成的类。要在以后使用它,您应该使用工具栏将内容保存在一个 *.cs 文件中。
  2. 您在此窗口中看到用于创建存储过程的生成的 transact-SQL 代码。您可以立即解析或执行它们,或者保存它们以供以后使用。

右侧区域

  1. 您可以查看在左侧区域中选择的字段的属性。
© . All rights reserved.