(asp.net(c#), sql server)
در این مقاله می خواهم نحوه اتصال به پایگاه داده SQL SERVER و اجرای دستورات sql را شرح بدهم. برای این کار یک مثال عملی را دنبال می کنیم.
کلاس های زیر برای کار با پایگاه داده مورد نیاز است :
SqlConnection : از این کلاس برای اتصال به پایگاه داده استفاده می شود.
SqlCommand : از این کلاس برای اجرای دستورات sql مانند select, insert, update, delete و اجرای stored procedure ها استفاده می شود.
DataTable : با اجرای دستور select توسط SqlCommand، یک آرایه ای از سطر و ستون ها تولید می شود که برای ذخیره کردن آن، از این کلاس استفاده می شود.
SqlDataAdapter : برای خواندن اطلاعات از پایگاه داده و ذخیره آن در DataTable از این کلاس استفاده می شود. این کلاس کاربردهای دیگری نیز دارد. ابتدا یک صفحه aspx بسازید
سپس یک database به نام SampleDb بسازید و در آن جدول Names را ایجاد کنید. این جدول دارای یک فیلد id از نوع int و Identity و یک فیلد به نام name و از نوع nvarchar(50) می باشد. برای ایجاد این جدول، کد زیر را در Management Studio یا Query Analyzer اجرا کنید.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Names](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Names] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
اتصال به پایگاه داده :
برای اتصال به پایگاه داده از کلاس SqlConnection استفاده می کنیم. این کلاس یک ویژگی مهم به نام ConnectionString دارد که مشخصات سرور، نام پایگاه داده، نام کاربری، کلمه عبور و خلاصه همه اطلاعات مورد نیاز برای وصل شدن به پایگاه داده باید در آن تعریف شود.
private readonly string cs = "server=.;Initial Catalog=SampleDb;Integrated Security=SSPI;Persist Security Info=False;";
خواندن اطلاعات از پایگاه داده :
تابع RebindNames با استفاده از پروسیجر Names_GetAll همه رکورد های جدول Names را می خواند و نمایش می دهد :
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Names_GetAll]
AS
BEGIN
SELECT * FROM [Names] ORDER BY id;
END
private readonly string cs = "server=.;Initial Catalog=SampleDb;Integrated Security=SSPI;Persist Security Info=False;";
private void RebindNames()
{
using (SqlConnection cnx = new SqlConnection(cs))
{
using (SqlDataAdapter adapter = new SqlDataAdapter("Names_GetAll", cnx))
{
using (DataTable dt = new DataTable())
{
adapter.Fill(dt);
gvNames.DataSource = dt;
gvNames.DataBind();
}
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RebindNames();
}
}
افزودن رکورد به جدول
برای افزودن یک نام به جدول از پروسیجر Names_Add استفاده می کنیم.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Names_Add]
@Name nvarchar(50), @Id int OUTPUT
AS
BEGIN
INSERT INTO [Names] ([name]) VALUES (@Name);
SELECT @Id = SCOPE_IDENTITY();
END
protected void btnAdd_Click(object sender, EventArgs e)
{
using (SqlConnection cnx = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("Names_Add", cnx))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = txtName.Text;
cmd.Parameters.Add("@Id", SqlDbType.Int).Direction = ParameterDirection.Output;
cnx.Open();
cmd.ExecuteNonQuery();
lblMessage.Text = string.Format("نام {0} افزوده شد، کد : {1}", txtName.Text, cmd.Parameters["@Id"].Value);
}
}
RebindNames();
}