نحوه اتصال به پایگاه داده و اجرای فرامین sql در دات نت (قسمت اول)

(asp.net(c#), sql server)



بسمه تعالی
در این مقاله می خواهم نحوه اتصال به پایگاه داده SQL SERVER و اجرای دستورات sql را شرح بدهم. برای این کار یک مثال عملی را دنبال می کنیم.
کلاس های زیر برای کار با پایگاه داده مورد نیاز است :
  • SqlConnection : از این کلاس برای اتصال به پایگاه داده استفاده می شود.
  • SqlCommand : از این کلاس برای اجرای دستورات sql مانند select, insert, update, delete و اجرای stored procedure ها استفاده می شود.
  • DataTable : با اجرای دستور select توسط SqlCommand، یک آرایه ای از سطر و ستون ها تولید می شود که برای ذخیره کردن آن، از این کلاس استفاده می شود.
  • SqlDataAdapter : برای خواندن اطلاعات از پایگاه داده و ذخیره آن در DataTable از این کلاس استفاده می شود. این کلاس کاربردهای دیگری نیز دارد.
ابتدا یک صفحه aspx مانند زیر بسازید <body>
<form id="form1" runat="server">
<div style="direction: rtl;">
<div>
<asp:Label runat="server" ID="lblMessage" />
</div>
<div>
<asp:GridView runat="server" ID="gvNames">
</asp:GridView>
</div>
<div>
<asp:TextBox runat="server" ID="txtName" Text="" />
&nbsp;&nbsp;&nbsp;
<asp:Button runat="server" ID="btnAdd" Text="افزودن" OnClick="btnAdd_Click" />
</div>
</div>
</form>
</body>




سپس یک database به نام SampleDb بسازید و در آن جدول Names را ایجاد کنید. این جدول دارای یک فیلد id از نوع int و Identity و یک فیلد به نام name و از نوع nvarchar(50) می باشد. برای ایجاد این جدول، کد زیر را در Management Studio یا Query Analyzer اجرا کنید. SET</SPAN> 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 دارد که مشخصات سرور، نام پایگاه داده، نام کاربری، کلمه عبور و خلاصه همه اطلاعات مورد نیاز برای وصل شدن به پایگاه داده باید در آن تعریف شود. برای کسب اطلاعات بیشتر در مورد این ویژگی به msdn و همچنین سایت www.connectionstrings.com مراجعه نمایید.
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("نام <b>{0}</b> افزوده شد، کد : {1}", txtName.Text, cmd.Parameters["@Id"].Value);
}
}
RebindNames();
}