版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
    
     好久没有写关于技术的文章了,嗯,要珍惜剩下的在学校的半年时间了。
 
     下面这个例子是我在一次面试后遇到的相关知识点,当然面试的时候在人家公司机器上写的程序没有拷回来,我回来自己没事就又写了一部分,自然,面试当天考的要比我回来写的这个复杂。具体知识点可以参考 《面试就是该这个样子滴》
 
     这个例子虽小,但是对于初学者来说还是有一点学习价值的,通过它你可以知道ADO.NET的基本数据访问方法,了解Hashtable的用法,掌握基本的数据绑定的知识,其中还可以了解存储过程编程等等。
 
1、数据库使用SQL SERVER 2005,下面是表结构,一共两个表:Dept和Users。
USE [Test]
GO
/****** Object:  Table [dbo].[Dept]    Script Date: 12/21/2006 21:11:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Dept](
 [DeptID] [int] IDENTITY(1,1) NOT NULL,
 [DeptName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
 
USE [Test]
GO
/****** Object:  Table [dbo].[Users]    Script Date: 12/21/2006 21:12:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Users](
 [UserID] [int] IDENTITY(1,1) NOT NULL,
 [UserName] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [DeptID] [int] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
 
2005中的存储过程和2000有了不同,写完了要运行一下才成功,似乎2000的时候新建完了就已经存在了的。下面是存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author:  <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[AddUser]
 @UserName VARCHAR(50),
 @DeptID INT
AS
 DECLARE @RecordCount as int
 SET @RecordCount =
  (SELECT COUNT(*) FROM Users WHERE UserName = @UserName)
 IF @RecordCount < 1
  BEGIN
   INSERT INTO Users(UserName,DeptID) VALUES(@UserName,@DeptID)
   RETURN @@IDENTITY
  END
 
好了,数据库的准备就结束了。
 
点击在新窗口查看全图
 {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnString"].ToString();
 }
    public static int ExecuteInsert(string strSQL, string paraNames, string paraValues)
    {
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }
        comm.Connection = conn;
        comm.CommandType = CommandType.StoredProcedure;
        comm.CommandText = strSQL;
        if (!paraValues.Equals(String.Empty) && !paraNames.Equals(string.Empty))
        {
            SqlParameterCollection paras = comm.Parameters;
            string[] para = paraNames.Split('|');
            string[] value = paraValues.Split('|');
            for (int i = 0; i < para.Length; i++)
            {
                SqlParameter sp = new SqlParameter(para[i], value[i]);
                paras.Add(sp);
            }
        }
        return comm.ExecuteNonQuery();
    }
    public static Hashtable GetDeptInfo()
    {
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = "SELECT DeptID,DeptName FROM Dept";
        SqlDataReader reader = comm.ExecuteReader();
        Hashtable ht = new Hashtable();
        while (reader.Read())
        {
            ht.Add(reader.GetInt32(0), reader.GetString(1));
        }
        reader.Close();
        return ht;
    }
}
从ExecuteInsert(string strSQL, string paraNames, string paraValues)方法中,大家可以学习到如何通过带参的存储过程来访问数据库。这里传入的参数是"|"分隔的参数名和参数值的字符串。
 
从GetDeptInfo()方法中,大家可以看到 Hashtable 的用法,其原型就是public virtual void Add(object key, object value);存储的是键值对,正好可以绑定到一个dropdownlist,显示部门名,而取得选择的部门的ID。
 
3、下面是应用程序的界面,很简单吧,呵呵,就是通过一个dropdownlist来绑定数据库中的部门表,然后添上用户名,就能添加进数据库里。
点击在新窗口查看全图
 
点击在新窗口查看全图    protected void btnAdd_Click(object sender, EventArgs e)
    {
        string paraNames = "@UserName|@DeptID";
        string paraValues =tbUserName.Text.Trim()+ "|" + ddlDept.SelectedValue.ToString();
        DataAccess.ExecuteInsert("AddUser",paraNames,paraValues);
    }
   
这两个方法都很简单, 就不多说了,呵呵,通过Page_Load中可以学习到如何构建DataTable,并如何把一个Hashtable的内容存到一个DataTable中,然后就是数据绑定了。
——本例只为给初学者练习,高手可以闪啦。。。。
 
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。