.NET例程——写给初学者
※版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
好久没有写关于技术的文章了,嗯,要珍惜剩下的在学校的半年时间了。
下面这个例子是我在一次面试后遇到的相关知识点,当然面试的时候在人家公司机器上写的程序没有拷回来,我回来自己没事就又写了一部分,自然,面试当天考的要比我回来写的这个复杂。具体知识点可以参考《面试就是该这个样子滴》。
这个例子虽小,但是对于初学者来说还是有一点学习价值的,通过它你可以知道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
/****** 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
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
/****** 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
SET ANSI_PADDING OFF
2005中的存储过程和2000有了不同,写完了要运行一下才成功,似乎2000的时候新建完了就已经存在了的。下面是存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
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
-- 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 (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();
}
{
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";
{
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)方法中,大家可以学习到如何通过带参的存储过程来访问数据库。这里传入的参数是"|"分隔的参数名和参数值的字符串。
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);
}
{
string paraNames = "@UserName|@DeptID";
string paraValues =tbUserName.Text.Trim()+ "|" + ddlDept.SelectedValue.ToString();
DataAccess.ExecuteInsert("AddUser",paraNames,paraValues);
}
这两个方法都很简单, 就不多说了,呵呵,通过Page_Load中可以学习到如何构建DataTable,并如何把一个Hashtable的内容存到一个DataTable中,然后就是数据绑定了。
——本例只为给初学者练习,高手可以闪啦。。。。
※版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
转载于:https://blog.51cto.com/august/13047