تبلیغات اینترنتیclose
شبکه
شبکه
وبلاگی برای برنامه نویسان و وبکاران
درباره وبلاگ


وبلاگی برای برنامه نویسان و وبکاران

آمار کاربران
نام کاربری :
رمز عبور :
ثبت نام عضو جدید
فراموشي رمز عبور

خبرنامه
جستجو
آمار وبلاگ
  • آنلاین : 1
  • بازدید امروز : 10
  • بازدید دیروز : 1
  • بازدید هفته گذشته : 17
  • بازدید ماه گذشته : 55
  • بازدید سال گذشته : 427
  • کل بازدید : 2868
  • کل مطالب : 9
  • نظرات : 0
  • رنک گوگل :

در بخش های قبل اين مقاله به نقش اساسی Data Set در ارتباط با ذخيره و بازيابی داده اشاره گرديد . علاوه بر Data Set ، می توان دستوراتی را مستقيما" بر روی  يک Connection بانک اطلاعاتی انجام داد . شی Connection سه متد زير را در ايـن رابطه ارائه نموده است :

  • ExecuteScalar : متد فوق ، يک  Query را اجراء نموده و در ادامه صرفا" يک مقدار را بر می گرداند(نظير شمارش تعداد رکوردهای موجود در يک جدول بانک اطلاعاتی )
  • ExecuteNonQuery : متد فوق ، دستوراتی نظير INSERT,UPDATE و DELETE را که باعث اعمال تغييرات در بانک اطلاعاتی می گردند را اجراء نموده و  تعداد سطرهای متاثر از اجرای دستور را برمی گرداند .
  • ExecuteReader : متد فوق ، باعث خواندن رکوردها ی موجود در بانک اطلاعاتی به صورت ترتيبی می گردد.

برای استفاده از متدهای فوق ، مراحل زير را دنبال می نمائيم :

  • ايجاد يک Connection با بانک اطلاعاتی
  • باز نمودن Connection
  • ايجاد يک شی Command شامل دستور SQL و يا Stored Procedure که می بايست اجراء گردد .
  • اجرای متد مورد نظر در ارتباط با شی Command
  • بستن Connection ايجاد شده با بانک اطلاعاتی

برگرداندن يک مقدار از بانک اطلاعاتی 
در بخش دوم  اين مقاله با نحوه اضافه نمودن و يا حذف سطرهائی از يک Data Set و بهنگام سازی بانک اطلاعاتی از طريق Data Set آشنا شديم . در اين رابطه لازم است به اين موضوع اشاره گردد که در برخی موارد لازم است که در ابتدا اطلاعاتی از بانک اطلاعاتی بازيابی و در ادامه رکورد مورد نظر به بانک اطلاعاتی اضافه گردد . ( بازيابی اطلاعات قبل از درج رکورد جديد در بانک اطلاعاتی ) . مثلا" زمانی که  رکوردی دارای يک فيلد کليد منحصر بفرد می باشد ، نظير فيلد ID در بانک اطلاعاتی نمونه Contact ، لازم است در ابتدا يک مقدار منحصربفرد جديد برای هر رکورد اخذ و در ادامه رکورد مورد نظر را در بانک اطلاعاتی اضافه نمود . در اين رابطه می توان از روش های متعددی به منظور دريافت يک مقدار کليد منحصربفرد جديد ، استفاده نمود .  ساده ترين روش در اين رابطه ، ايجاد  يک شی Command و استفاده از متد ExecuteScalar به منظور برگرداندن يک مقدار می باشد . با توجه به نوع بانک اطلاعاتی می توان از دو نوع متفاوت اشياء Command  استفاده نمود :

  • اشياء SqlCommand ، باعث اجرای دستورات بر روی يک Connection مربوط به بانک اطلاعاتی SQL می گردند .
  • اشياء OleDBCommand ، باعث اجرای دستورات بر روی يک  Connection مربوط به بانک اطلاعاتی OLE می گردند .

کد زير تعداد رکوردهای موجود در جدول Orders  را با استفاده از تابع Count برمی گرداند .

VB.NET ::Returning A value from a DataBase

Dim ordersCMD As SqlCommand = New SqlCommand("SELECT Count(*) FROM Orders", nwindConn)
Dim count As Int32 = CInt(ordersCMD.ExecuteScalar())

از متد ExecuteScalar ، می توان به همراه هر عبارت SQL  که قادر به برگرداندن يک مقدار می باشد ، استفاده نمود .

تغيير رکوردهای موجود در يک بانک اطلاعاتی 
متد ExecuteNonQuery ،دستوراتی را اجراء می نمايد که يک Data Set را بر نمی گردانند (نظير دستورات INSERT , DELETE و يا UPDATE ) . به منظور اجرای دستوراتی اينچنين در ابتدا با استفاده از دستوراتSQL  و Connection  مربوطه يک شی Command را ايجاد نموده و در ادامه می توان از  متد ExecuteNonQuery مربوط به شی Command استفاده نمود. کد زير با اجرای دستور INSERT ، يک رکورد را در بانک اطلاعاتی با استفاده از ExecuteNonQuery  درج می نمايد .

VB.NET ::Insert  Record  Directly in a DataBase

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")
nwindConn.Open()
Dim insertStr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"
Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
Dim recordsAffected As Int32 = insertCMD.ExecuteNonQuery()

متد ExecuteNonQuery از Connection  بانک اطلاعاتی استفاده نموده و در اين رابطه از  Data Adapter و يا يک Data Set ، استفاده نمی شود.در صورتی که تغييراتی در يک جدول بانک اطلاعاتی با استفاده از متد فوق انجام شود ، می بايست Data Set مربوطه را که متاثر از تغييرات فوق می باشد را  با فراخوانی متد Fill ، بهنگام نمود.

بازيابی رکوردها ی موجود در يک بانک اطلاعاتی 
متد ExecuteReader دستوراتی را که باعث برگرداندن رکوردهائی می شوند ، اجراء می نمايد. ( نظير يک عبارت SQL SELECT ) .هر رکورد  به عنوان يک شی Data Reader برگردانده می شود. که نوع خاصی از يکData Set و با ويژگی فقط خواندنی است . با توجه به اينکه متد ExecuteReader مستقيما" بر روی Connection بانک اطلاعاتی عمل خواهد نمود ، دو نوع ( نسخه ) متفاوت از شی Data Reader وجود دارد :OleDbDataReader و SqlDataReader .  
استفاده از متد ExecuteReader برای ايجاد اشياء Data Reader ، دارای کارائی بمراتب بهتری در مقايسه با ايجاد Data Set از يک Data Adapter بوده  ( در هر لحظه يک سطر در حافظه مستقر می گردد )  ولی انعطاف پذيری آن کمتراست.  اشياء Data Reader ، به صورت فقط خواندنی بوده و امکان خواندن رکوردها بصورت ترتيبی و صرفا" به سمت جلو( Forward ) وجود خواهد داشت ( هر لحظه يک رکورد ) . با استفاده ازData Set ، امکان دريافت رکوردهای بمراتب بيشتری با هر نوع اولويت وجود داشته و در ادامه می توان پس از اعمال تغييرات آنان را مجددا" در بانک اطلاعاتی درج نمود . 
کد زير ، نحوه استفاده  از متد ExecuteReader به منظور بازيابی اطلاعات از بانک اطلاعاتی را نشان می دهد .

VB.NET ::Retrieving Records Directly from DataBase

<%@ Page Language="vb" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.SqlClient" %>
<script runat="server">
Private Sub Page_Load(ByVal Source As Object, ByVal E As EventArgs) 
 Dim sql As String = "SELECT * FROM Employees WHERE EmployeeID = "Request.QueryString("EmployeeID")
 Dim strConnection As String = ConfigurationSettings.AppSettings("NWind")
 Dim conn As New SqlConnection(strConnection)
 conn.Open() 
 Dim cmd As New SqlCommand(sql, conn)
 Response.Write("SQL: " & sql & "<br/>")
 Dim dr As SqlDataReader
 dr = cmd.ExecuteReader()
 Do While dr.Read()
   Response.Write(dr("FirstName").ToString & " " & dr("LastName").ToString)
 Loop
 conn.Close()
 End Sub
</script>
<html><head></head><body></body></html>

شی Data Reader ، شامل مجموعه ای از رکوردها با ويژگی  Read-Forward بوده و  متد Read  تا زمانی که به انتهای مجموعه رکوردهای موجود در 



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

در اين بخش با نحوه نمايش داده موجود در Data Set در کنترل های ListBox , DropDown,CheckBoxList وRadioButtonList آشنا خواهيم شد . 
داده موجود در يک DataSet را می توان به هر نوع List Conrol  استفاده شده بر روی يک فرم وب ، نسبت داد .کنترل های DataSet و DataList صرفا" دو نمونه متداول به منظور نمايش يک DataSet می باشند. برای نمايش داده موجود در يک DataSet می توان از کنترل های  ListBox,DropDownList,CheckBoxList و يا RadioButtonList  ، نيز استفاده نمود .

  •  کنترل DropDownList : با استفاده از کنترل فوق ، کاربران قادر به انتخاب يک آيتم از ليست Drop-Downمی باشند.

  •  کنترل ListBox : با استفاده از کنترل فوق ، کاربران قادر به انتخاب يک و يا چندين آيتم از طريق يک ليست از قبل تعريف شده می باشند. با تنظيم خصلت  SelectionMode به Multiple امکان انتخاب چندين آيتم در اختيار کاربران قرار خواهد گرفت . ( در صورتی که خصلت فوق مقدار Single را داشته باشد ، صرفا" امکان انتخاب يک آيتم وجود خواهد داشت ) .

  • کنترل CheckBoxList : برای اضافه نمودن Check box بر روی يک فرم وب ، می توان از کنترلCheckBox و يا  CheckBoxList ، استفاده کرد. کنترل های فوق ، روشی مناسب به منظور ورود اطلاعات منطقی توسط کاربران را ارائه می نمايند :  True/False , yes/no  و on/off .

  • کنترل RadioButtonList : برای اضافه نمودن دکمه های Radio button بر روی يک فرم وب ، می توان از کنترل  RadioButton و يا RadioButtonList ، استفاده نمود.

 برای نمايش داده ازDataSet در يک ListBox,DropDownList,CheckBoxList و يا RadioButtonList  ، مراحل زير را دنبال می نمائيم :

  • مقداردهی خصلت DataSource کنترل به نام Data Set

  • مقداردهی خصلت DataText کنترل به يکی از فيلدهای موجود در Data Set  (فيلدی که به عنوان خصلت Textليست نمايش داده خواهد شد).

  •  مقداردهی خصلت DataValue کنترل به يکی از فيلدهای موجود در Data Set (مقداری که به عنوان خصلتValue برگردانده خواهد شد ) . 
    تنظيمات يک  کنترل DropDownList نمونه :

  •  پر نمودن Data set از طريق Data adapter ايجاد شده  و نسبت دهی آن به کنترل

VB.NET ::

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
    SqlDataAdapter1.Fill (DataSet11)
    DropDownList1.DataBind()
End Sub

در زمان اجراء ، کنترل DropDownList ، ليستی از اسامی ( Fname ) را از جدول Contact استخراج و آنان را نمايش خواهد داد.خصلت SelectedItem.Value ، مقدار ID را برمی گرداند . ازفيلد ID ، می توان به عنوان يک کليد به منظور بازيابی ساير اطلاعات  استفاده نمود.

 
کنترل DropDownList  صرفا" می تواند شامل  يک مقدار برای خصلت های DataText و DataValue مربوط به کنترل باشد .در صورتی که قصد استفاده از نام ( Fname ) و نام خانوادگی ( Lname ) از افراد موجود در جدولContact را داشته باشيم، می بايست اين کار را از طريق کد انجام داد. روتين مربوط به رويداد Page_Load ، نام خانوادگی ( Lname )  و نام ( Fname ) را به DropDownList اضافه نموده و ID به عنوان خصلت Value برای هر يک از آيتم ها ی موجود در ليست در نظر گرفته خواهد شد :

VB.NET ::

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
  If Not IsPostBack Then
     SqlDataAdapter1.Fill(DataSet11)
     Dim drowItem As DataSet1.ContactRow
     For Each drowItem In DataSet11.Contact
        Dim lstNew As New ListItem()
        lstNew.Text = drowItem.Fname & " ◄ " & drowItem.Lname
        lstNew.Value = drowItem.ID()
       DropDownList1.Items.Add(lstNew)
    Next
  End If
End Sub

انتخاب رکوردهائی خاص 
با توجه به مقدار برگردانده شده توسط DropDownList ، می توان از آن به عنوان کليدی در جهت بازيابی ساير اقلام اطلاعاتی در بانک اطلاعاتی استفاده نمود. ID ، يک کليد منحصر بفرد در جدول Contact  بوده و می توان از آن به منظور استخراج و نمايش ساير اطلاعات ، استفاده کرد. کد زير يک DataSet شامل اطلاعات مربوط به فرد انتخاب شده در ليست DropDownList را ايجاد می نمايد.

VB.NET ::DropDownList1_SelectedIndexChanged

Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object,_
 ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
SqlDataAdapter1.SelectCommand.CommandText = "SELECT * FROM Contact " &_
"WHERE  ID=" & DropDownList1.SelectedItem.Value
  DataSet11.Clear(  )
  SqlDataAdapter1.Fill(DataSet11)
  DataGrid1.DataBind()
End Sub

VB.NET ::Page Load Event

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
    SqlDataAdapter1.Fill (DataSet11)
    DropDownList1.DataBind()
   DropDownList1.SelectedIndex = 0
End Sub

 

در مثال فوق ، از يک کنترل  DropDownList و يک DataGrid  در فرم وب استفاده شده است . با انتخاب يک آيتم از طريق ليست ارائه شده توسط کنترل  DropDownList ، ساير اطلاعات فرد انتخاب شده از بانک اطلاعاتی استخراج ( با توجه به Query اجراء شده ) و پس از خالی نمودن Dataset  ( پر شده در مرحله قبل ) ، مقدار DataSet با توجه بهQuery جديد ، مجددا" تکميل و در نهايت به DataGrid نسبت داده می شود . ( نحوه استفاده از DataGrid در بخشسوم مقاله ، توضيح داده شده است ) .

در بخش ششم اين مقاله با نحوه انجام عمليات بر روی يک بانک اطلاعاتی بيشتر آشنا خواهيم شد.



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

در اين بخش با نحوه نمايش  DataSet در يک  DataList آشنا می شويم .
با استفاده از کنترل DataList می توان اطلاعات موجود در يک Data Set را به صورت ليستی مشتمل بر مجموعه ای از سطرها نمايش داد. ( برخلاف  DataGrid که شامل سطرها و ستون هائی است ). کنترل فوق برای نمايش سطرهائی از داده مناسب می باشد . برای تعريف فرمت نمايش داده می توان از تمپليت ها و Style استفاده نمود . در کنترل DataList ، سطرهائی از داده به عنوان آيتم هائی در ليست محسوب شده و می توان برای تعريف لی اوت آنان در تمپليت ها  از HTML Text و يا ساير کنترل ها ، استفاده نمود. مثلا" می توان از کنترل Label برای نمايش يک فيلد از منبع داده در تمپليت مربوطه استفاده نمود . مبنای اصلی فرمت نمايش داده از يک منبع داده ، تمپليت ها بوده و می توان از آنان به منظور تعيين شکل ظاهری و محتوی کنترل استفاده بعمل آورد. در اين رابطه لازم است در ابتدا با استفاده از تمپليت های Header ، Footer و Separator فرمت مورد نظر خود را برای شکل ظاهری کنترل DataList مشخص نموده  و در ادامه با استفاده از تمپليت ItemTemplate ، آيتم ها ی مورد نظر به منظور نمايش در ليست به همراه فرمت مربوطه را تعريف نمود.
برای نمايش يک Data Set در کنترل DataList ، مراحل زير را دنبال می نمائيم :

  • ايجاد اشياء  Connection,Adapter و Dataset ( در بخش اول مقاله ، توضيح داده شده است ) .

  • افزودن يک کنترل DataList  به فرم وب 

  • مقداردهی مناسب خصلت DataSource کنترل  DataList  به Data Set ايجاد شده 

  • افزودن کد لازم به رويداد Page_Load مربوط به صفحه به منظور پرنمودن Data Set و نسبت دهی داده از Data Set بهDataList

VB.NET ::

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
    SqlDataAdapter1.Fill (DataSet11)
   DataList1.DataBind ( )
End Sub

  •  ويرايش عنوان کنترل DataList ، آيتم ها و جداکننده تمپليت برای تعريف فرمت و  شکل ظاهری DataList 
    کنترل DataList از تمپليت ها برای مشخص نمودن محتوی عناوين ، زير نويس ها و سطرها استفاده می نمايد. با ويرايش هر يک از تمپليت ها ی ارائه شده، امکان استفاده از متن و يا کنترل هائی که به آيتم هائی در Data Set نسبت داده می شوند، فراهم می گردد. در اين رابطه سه گروه تمپليت ارائه شده است : 
     Header و Footer : تمپليت های فوق ، عنوان  و زيرنويس يک DataList  را مشخص می نمايند . (ابتدا و انتهای  DataList ). 
    Items : تمپليت فوق ، محتوی سطرها در يک DataList را مشخص نموده و امکان تغيير شکل ظاهری سطرهای زوج ، فرد ، انتخاب شده و يا ويرايش شده ، فراهم می گردد. 
    Separator : با استفاده از تمپليت فوق می توان سياست مورد نظر خود را برای تفکيک هر يک  سطرها از يکديگر ، مشخص نمود . ( خط افقی و يا ساير جداکنندها ) 
     

ويرايش يک  تمپليت DataList  
برای ويرايش هر يک از تمپليت های اشاره شده ، مراحل زير را دنبال می نمائيم :

  • کليک سمت راست بر روی کنترل DataList ، انتخاب گزينه Edit Template و در نهايت مشخص نمودن نوع تمپليتی که قصد ويرايش آن را داريم :

  • پس از انتخاب تمپليت مورد نظر برای ويرايش ، شکل ظاهری کنترل DataList تغيير می نمايد . در ادامه می توان متن مورد نظری را که قصد نمايش آن در تمپليت را داريم تايپ و در نهايت کنترل های مورد نظر را به آن اضافه می نمائيم ( در اين مثال از دو کنترل Label استفاده شده است ) .

  • به منظور نمايش يک آيتم از Data Set در تمپليت ، در ابتدا يک کنترل ( در اين مثال از کنترل Lable استفاده شده است ) به تمپليت اضافه نموده و در ادامه بر روی خصلت DataBindings آن کليک تا جعبه محاوره ای DataBindings برای کنترل مورد نظر نمايش داده شود .

  • پس از اعمال تغييرات مورد نظر در تمپليت و يا کنترل های استفاده شده در تمپليت ، بر روی کنترل DataList کليک سمت راست نموده و گزينه End Template Editing را انتخاب می نمائيم .


 

کد HTML زير نام و آدرس پست الکترونيکی ( انتخاب شده از طريق يک  Data Set  ) را در يک DataList نمايش می دهد :

Display a DataList Control

<asp:DataList id=DataList1 runat="server" DataSource="<%# DataSet11 %>" >
 <HeaderTemplate>
   <P dir="rtl" >DataListنمايش  اطلاعات با استفاده ا ز </P>
  </HeaderTemplate>
<ItemStyle Font-Size="X-Small" Font-Names="Tahoma" ></ItemStyle>
<ItemTemplate>
  <TABLE id="Table29" >
    <TR>
       <TD dir="ltr" align="left">
         <asp:Label id=lblEmail runat="server"   Text='<%# DataBinder.Eval(Container, "DataItem.Email") %>'  >
         </asp:Label></TD>
      <TD dir="rtl" align="right">
         <asp:Label id=lblFname runat="server"  Text='<%# DataBinder.Eval(Container, "DataItem.Fname") %>'  >
          </asp:Label></TD>
    </TR>
  </TABLE>
</ItemTemplate>
</asp:DataList>

پس از اجرای برنامه ، کنترل DataList اطلاعاتی مشابه زير را نمايش خواهد داد .

در بخش پنجم اين مقاله با نحوه نمايش داده موجود در يک Data Set در کنترل های ListBox , DropDown,CheckBoxList وRadioButtonList آشنا خواهيم شد .



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

اکثربرنامه کامپيوتری نيازمند دستيابی به داده  از طريق يک منبع داده ( Data Source ) می باشند . فريمورک دات نت ، امکان طراحی و پياده سازی برنامه های کامپيوتری با محوريت داده را فراهم و امکان دستيابی به داده از طريق  منابع داده متفاوت و با استفاده از يک محيط همگن و يکپارچه توسط ADO.NET را فراهم می نمايد.ADO.NET امکان ايجاد برنامه های توزيعی و اشتراک داده بين آنان را فراهم می نمايد . با استفاده از امکاناتADO.NET امکان ارتباط با منابع داده متفاوت ، بازيابی ، پردازش و بهنگام سازی داده فراهم می گردد.ADO.NET از XML به منظور انتقال داده بين برنامه ها و منابع داده ، استفاده می نمايد.
اکثر کنترل های سرويس دهنده ASP.NET  دارای پتانسيلی با نام " نسبت دهی داده " ( Data Binding ) ، می باشند. نسبت دهی داده ، فرآيندی است که در آن امکان استفاده از داده در يک برنامه وب فراهم می گردد. مثلا" می توان کنترل های سرويس دهنده DataGrid و DataList  را بر روی يک فرم وب و به منظور نمايش داده موجود در يک Data Set استفاده نمود . دراين مقاله قصد داريم به با نحوه نمايش يک Data Set بر روی يک فرم وب با استفاده از کنترل  DataGrid  بيشتر آشنا شويم .

منابع داده ( Data Sources ) 
 "منبع داده " ، يک بانک اطلاعاتی سرويس دهنده  و يا يک فايل XML می باشد . برای دستيابی به يک منبع داده ، می بايست يک ارتباط( Connection ) با منبع داده از طريق Data Providers ، ايجاد گردد.Data Provider ارائه شده همراه  ADO.NET ،   امکان برقراری  ارتباط به يک منبع داده و انجام عمليات متفاوتی نظير اجرای دستورات  SQL  را فراهم می نمايد .

NET Data Provider . 
Data Provider ، امکان برقراری ارتباط با يک منبع داده را فراهم و در ادامه می توان دستوراتی را اجراء و نتايج مورد نظر را بازيابی نمود. . يک Data Provider ارائه شده در دات نت ، شامل اشياءConnection,Command,DataReader و DataAdapter بوده که امکان ارتباط با بانک اطلاعاتی و اجرای دستورات SQL را فراهم می نمايد. ويژوال استوديو دات نت و فريمورک دات نت ، شامل دو Provider ، با نامOLE DB .NET و SQL Server .NET می باشد . با استفاده از OLE DB.NET Provider می توان به منابع داده از نوع OLE DB ارتباط برقرار نمود. با بکارگيری SQL Server .NET Provider ، امکان برقراری ارتباط با بانک های اطلاعاتی SQL Server 7.0 و بعد از آن فراهم می گردد.

DataSet 

  •  يک Cache از رکوردهای بازيابی شده از يک منبع داده نظير يک بانک اطلاعاتی و يا يک فايل XMLاست.

  • شامل رکوردهائی از يک و يا چندين جدول و اطلاعاتی در خصوص نحوه ارتباط آنان می باشد.

  • با استفاده از DataSet ، امکان انجام پردازش دلخواه با توجه به خواسته کاربر ، ميسر می گردد.

  • از DataSet بدون يک منبع داده به منظور مديريت داده دريافتی از يک برنامه و يا يک فايل XML ، استفاده می گردد .

  • امکان ارتباط با بانک اطلاعاتی را به صورت غيرمتصل فراهم می نمايد .

  • امکان مبادله يک DataSet بين عناصر موجود در لايه های متفاوت وجود دارد. مثلا" يک عنصر در Tierميانی می تواند اقدام به ايجاد و توزيع يک DataSet و ارسال آن برای عنصر ديگر در يک برنامه نموده تا امکان پردازش لازم برروی DataSet ، فراهم گردد.

  • در زمان ايجاد يک برنامه با محوريت داده که از ADO.NET استفاده می گردد ، داده بين اشياء متفاوت منتقل می گردد. داده در ابتدا از يک منبع داده به يک DataSet  و در ادامه به عنصر مورد نظر منتقل می گردد( نظير کنترل ها در يک فرم وب) .

  • ADO.NET از XML به منظور انتقال داده بين عناصر متفاوت يک برنامه استفاده می نمايد .ADO.NET به صورت اتوماتيک فايل های XML را با استفاده از داده موجود در يک DataSet ايجاد و در ادامه آنان را برای عنصر ديگر ارسال می نمايد .

  • يک DataSet ، مجموعه ای از جداول و اطلاعاتی در رابطه با نحوه ارتباط بين آنان می باشد. هر جدول شامل مجموعه ای از سطرها ، ستون ها و محدوديت ها است . برای دستيابی به اين عناصر می توان از خصلت ها و مجموعه های يک DataSet استفاده نمود. برای کار با DataSet در ADO.NET از کلاس های زير استفاده می شود : 
    کلاس DataSet : کلاس فوق ، شامل مجموعه Tables از جداول موجود در يک DataSet می باشد . علاوه بر اين،  کلاس DataSet شامل مجموعه Relations بوده که ارتباط بين جداول در يک DataSet را مشخص می نمايد . 
    کلاس DataTables : کلاس فوق ، شامل مجموعه های Rows و Columns بوده که مسئوليت ارائه سطرها و ستون ها را برعهده دارند.کلاس فوق، همچنين شامل مجموعه های ChildRelation وParentRelation بوده که ارتباط بين جداول را مشخص می نمايد.
    کلاس DataRow : کلاس فوق ، شامل خصلت RowState می باشد . خصلت فوق ، تغيير يک سطر پس از لود شدن جدول از يک بانک اطلاعاتی را مشخص نموده و می تواند دارای مقاديرDeleted,Modified,New و Unchanged ، باشد .

DataGrid 
کنترل سرويس دهنده وب DataGrid ، داده ها را در يک لی اوت جدول بندی شده ، نمايش میدهد . به صورت پيش فرض DataGrid داده را در حالت Read-only ( فقط خواندنی ) نمايش داده  ولی امکان نمايش داده به صورت اتوماتيک در زمان اجراء  در کنترل های قابل ويرايش ، نيز وجود دارد DataGrid ، امکان Pagging را نيز فراهم می نمايد .کنترل DataGrid ، فيلدهای يک منبع داده را به عنوان ستون هائی در يک جدول نمايش می دهد. هر سطر در کنترل DataGrid نشان دهنده يک رکورد در منبع داده است . کنترل DataGrid امکاناتی همچون : انتخاب ، ويرايش ، حذف ، مرتب سازی و paging را حمايت می نمايد .


نمايش يک DataSet در DataGrid 
ساده ترين روش نمايش يک Data Set بر روی يک فرم وب ، استفاده از کنترل DataGrid و مقداردهی مناسب خصلت DataSource آن می باشد.بدين منظور مراحل زير را دنبال می نمائيم :

  • ايجاد اشياء  Connection,Adapter و Dataset ( در بخش اول مقاله ، توضيح داده شده است ) .

  • اضافه نمودن يک کنترل DataGrid بر روی فرم وب

  • مقداردهی خصلت DataSource مربوط به DataGrid به نام Data Set

 

  • افزودن کد لازم در رويداد Page_Load به منظور پر نمودن Data Set از طريق Adapter و نسبت دهی داده از Data Set به DataGrid

VB.NET

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
   SqlDataAdapter1.Fill(DataSet11)
   DataGrid1.DataBind()
End Sub

روتين فوق ، تمامی ستون های موجود در Data Set را بدون فرمت مناسب و به صورت زير نمايش می دهد :

همانگونه که مشاهده می شود ،DataGrid بدون فرمت خاصی نمايش داده شده است .برای انتخاب ستون هائی که قصد نمايش آنان را در DataGrid داريم  و همچنين تعريف فرمت مناسب برای نمايش هر يک از آنان ، مراحل زير را دنبال می نمائيم :

  • کليک بر روی Property Builder در پنجره Properties . در ادامه ، جعبه محاوره ای Propertiesبرای DataGrid نمايش داده می شود .

  • در صورتی که قصد نمايش تمام ستون های موجود را در DataGrid داشته باشيم ، می بايست گزينه Create Columns automatically at run time  به همان وضعيت پيش فرض ( انتخاب شده ) باقی مانده و صرفا" با انتخاب گزينه Format ، اقدام به تعريف فرمت نمايش DataGrid و هر يک از ستون های مربوط به آن نمود.

  • در صورتی که قصد نمايش تمامی ستون های موجود را در DataGrid نداشته باشيم می بايست مقدارگزينه Create Columns automatically at run time  ، غير فعال و در ادامه با استفاده از دکمه ">"، ، ستون ها ی مورد نظر به منظور نمايش در DataGrid را مشخص نمود . پس از انتخاب هر ستون می توان تظميمات لازم در ارتباط با آن  را انجام داد. به عنوان نمونه ، می توان با استفاده از  Header Text ،  عنوان هر يک از ستون ها و با استفاده از   Footer Text عنوان مورد نظر برای نمايش در قسمت پائين هر ستون را مشخص نمود ( مقدار پيش فرض ، Blank است ) .

  • برای تعريف فرمت مناسب برای هر يک از ستون ها در DataGrid ، گزينه Format را از طريق جعبه محاوره ای DataGrid Properties  انتخاب و در ادامه می توان تنظيمات لازم ( رنگ رويه ، رنگ زمينه ، نوع و اندازه فونت ، تراز متن )  به منظور نمايش DataGrid ، عناوين ،  ستون های انتخاب شده و ساير موارد ديگر را انجام داد. ( بررسی تمامی امکانات DataGrid از حوصله اين مقاله خارج بوده و در مقالاتی جداگانه به بررسی کامل آن خواهيم پرداخت ) .

 شکل زير يک DataGrid فرمت شده را نمايش می دهد :

در بخش چهارم اين مقاله با نحوه استفاده از Data Set در يک DataList آشنا خواهيم شد.



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

در بخش اول اين مقاله با نحوه ايجاد  Connection و  Dataset آشنا شديم . همانگونه که اشاره گرديد از مجموعه های Tables,Rows و Columnsبرای دستيابی به داده موجود در يک DataSet استفاده می گردد. با استفاده از مجموعه Rows می توان سطرهائی از يک  DataSet را تغيير، حذف و يا سطر جديدی را به آن اضافه نمود. در ادامه به بررسی نحوه انجام عمليات فوق ، خواهيم پرداخت . در اين رابطه از يک بانک اطلاعاتی نمونه (SQL Server ) با نام Contact ، يک DataSet نمونه با نام Dataset11  ، يک کنترل DataGrid بر روی فرم وب با نام DataGrid1 و سه Button به منظور انجام عمليات افزودن ، ويرايش و حذف سطرهائی از DataSet استفاده شده است :

بانک اطلاعاتی Contact :

Data set نمونه :

فرم وب WebForm2.aspx : ( شامل DataGrid ، سه Button و اشياء لازم به منظور ارتباط با بانک اطلاعاتی )

تنظيم خصلت های  DataGrid :

اجرای اوليه WebForm2.aspx :

اضافه نمودن رکورد
 برای افزودن يک رکورد به Data Set ، می بايست يک شی جديد Row ، ايجاد و در ادامه آن را به مجموعه Rows مربوط به شی DataSetاضافه نمود. کد زير، نحوه انجام عمليات فوق را نشان می دهد :

VB.NET ::Add Record

Private Sub butAddRow_Click (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butAddrow.Click 
 Dim rowNew As DataSet1.ContactRow = DataSet11.Contact.NewRow
rowNew.Fname = "
مديريت سايت "
rowNew.Lname = "
مديريت سايت "
rowNew.Email = "Info@Srco.ir"
DataSet11.Contact.Rows.Add(rowNew)
End Sub

پس از فعال نمودن ( کليک ) دکمه "اضافه نمودن رکورد" ، يک سطر با اطلاعات فوق به  Dataset اضافه شده و در ادامه بهنگام سازی بانک اطلاعاتی از طريق DataSet می شود.

ويرايش يک رکورد 
برای تغيير يک سطر در Data Set ، در ابتدا با استفاده از متد FindBy  سطر مربوطه را پيدا نموده ( بر اساس يک کليد جستجو که معمولا" فيلدی است که در بانک اطلاعاتی به عنوان "کليد اوليه " ، تعريف شده است ) و در ادامه می توان  تغييرات دلخواه را بر روی فيلدهای اطلاعاتی ، اعمال نمود( فيلد ID به عنوان DataKeyField در DataSet  تعريف شده است ) .کد زير، نحوه انجام عمليات فوق را نشان می دهد :

VB.NET ::Update Record

Private Sub butChangeRow_Click (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butChangeRow.Click 
 Dim rowChange As DataSet1.ContactRow
rowChange = DataSet11.Contact.FindByID("
2")
rowChange.Fname = "
ايران"
 End Sub

در مثال فوق ، سطری که دارای ID با شماره 2 می باشد ، با استفاده از متد FindBy پيدا شده و در ادامه فيلد Fname آن به " ايران" ، تغيير داده می شود. پس از اجرای برنامه و فعال نمودن دکمه " ويرايش رکورد " ، تغييرات در DataSet اعمال و در ادامه بهنگام سازی بانک اطلاعاتی از طريقDataSet می شود.

حذف رکورد 
برای حذف يک سطر در Data Set ، در ابتدا با استفاده از متد FindBy  يک سطر از جدول را در اختيار گرفته و در ادامه با استفاده از متد Deleteمربوط به شی Row آن را حذف می نمائيم .کد زير، نحوه انجام عمليات فوق را نشان می دهد :

VB.NET :: Delete Record

Private Sub butDeleteRow_Click (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butDeleteRow.Click 
   Dim rowDelete As DataSet1.ContactRow
   rowDelete = DataSet11.Contact.FindByID("9")
  rowDelete.Delete()
 End Sub

در مثال فوق ، سطری که دارای ID با شماره 9 می باشد ، با استفاده از متد FindBy ، پيدا شده  و در ادامه امکان حذف آن با استفاده از متد Delete ، فراهم می گردد. پس از اجرای برنامه و فعال نمودن دکمه " حذف رکورد " ، تغييرات در DataSet اعمال و در ادامه بهنگام سازی بانک اطلاعاتی از طريق DataSet انجام می شود.

بهنگام سازی بانک اطلاعاتی از طريق DataSet 
با استفاده از متد Update مربوط به Adapter می توان اقدام به بهنگام سازی بانک اطلاعاتی از طريق شی DataSet نمود.عمليات فوق، معمولا" پس از پردازش تمامی رويدادهای کنترل بر روی صفحه انجام می شود ، بنابراين می توان متد Update را  از طريق رويداد Page_PreRender فعال نمود ( فراخوانی ).

VB.NET :: Update Database From DataSet

Private Sub Page_PreRender (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles MyBase.PreRender
  SqlDataAdapter1.Update(DataSet11)
End Sub

ADO.NET در زمان بهنگام سازی يک بانک اطلاعاتی از طريق  Data Set ، عمليات زير را انجام می دهد:

  • تشخيص تغييرات بر روی Data Set با بررسی خصلت RowState مربوط به هر يک از اشياء DataRow
  • فراخوانی InsertCommand,DeleteCommand و يا UpdateCommand مربوط به شی Adapter  به منظور اعمال تغييرات لازم دربانک اطلاعاتی
  • Reset نمودن خصلت های RowState بهنگام شده مربوط به اشياء DataRow به UnChanged

خصلت های InsertCommand,DeleteCommand و UpdateCommand مربوط به شی Adapter به صورت اتوماتيک و از طريق شیSelectCommand ايجاد می گردند(زمانی که Data Set از طريق يک Adapter ( در حالت Design ) ايجاد می گردد). هر يک از خصلت های فوق ، يک شی OleCommand و يا SqlCommand را ارائه می نمايند . اشياء Command دارای خصلت های زير می باشند که نحوه اجرای Commandرا مشخص می نمايند .

  • خصلت CommandText شامل عبارت SQL و يا نام Stored Procedure به منظور اجرای دستور است.

  • خصلت CommandType نحوه اجرای دستور را با استفاده از تنظيمات زير مشخص می نمايد :
     مقدار  Text ، باعث اجرای دستور به عنوان يک عبارت SQL می گردد ( مقدار پيش فرض ) 
     مقدار StoredProcedure ، باعث اجرای دستور به عنوان يک Stored Procedure در بانک اطلاعاتی می گردد . 
     مقدار TableDirect ، باعث برگرداندن تمامی جدول می گردد . تنظيم فوق صرفا" در رابطه با OLE DB.NET  استفاده می شود (Data Provider )

می توان محتوی DataSet و نحوه بهنگام سازی داده را با تغيير عبارت SQL استفاده شده توسط اين اشياء ، انجام داد .

به منظور مشاهده و يا تغيير دستورات فوق ، مراحل زير را دنبال می نمائيم :

  • در پنجره Properties ، بر روی خصلت Command  مورد نظری که قصد تغيير آن را داريم ، کليک می نمائيم.  ( Double-Click ) 
  • خصلت CommandText را برای Command انتخاب و در ادامه با کليک نمودن بر روی دکمه مربوطه ( Ellipsis ) ، جعبه محاوره ایQuery Builder نمايش داده می شود.

  • انتخاب ستون هائی که قصد استفاده از آنان در Command را داريم ( فعال نمودن Check Box ) ويا تايپ مستقيم عبارت SQL پانل مربوط به Command .

ايجاد يک ارتباط با بانک اطلاعاتی در زمان اجراء 
ايجاد اشياء مربوط به داده در حالت Design روشی مناسب برای فراگيری نحوه دستيابی داده توسط ADO.NET می باشد، چراکه ويژوال استوديو دات نت ، به صورت اتوماتيک اشياء Connection و Adapter را ايجاد می نمايد . برخی از  تتظيمات مربوط به خصلت ها نظيرConnectionString پيچيده بوده و ايجاد آنان بدون کمک Design mode امری مشکل به نظرمی آيد. پس از ايجاد يک Connection در حالتDesign ، می توان با استفاده از عمليات Copy&Paste، تنظيمات مربوط به خصلت را به منظور ايجاد Connection مشابه در کد مورد نظر،استفاده نمود . دستيابی به اشياء داده از طريق  کد، مشابه مراحل گفته شده برای دستيابی به داده در حالت Design می باشد :

  • مرحله اول : ايجاد شی Connection
  • مرحله دوم : ايجاد يک شی Adapter
  • مرحله سوم : ايجاد يک شی Data Set
  • مرحله چهارم : فراخوانی متدها بر روی شی Adapter به منظور پرنمودن و يا بهنگام سازی Data Set
  • مرحله پنجم : استفاده از فرآيند نسبت دهی داده و يا روش های ديگر به منظور نمايش داده از طريق  Data Set

کد زير اشياء داده را ايجاد و داده موجود در يک بانک اطلاعاتی SQL را نمايش می دهد :

VB.NET ::Create data objects&Display data

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles MyBase.Load

مرحله اول : ايجاد Connection

Dim sqlConnectContactMgmt As New SqlConnection ("Server=(local) ; database=Contact;Trusted_Connection=yes"

مرحله دوم : ايجاد يک Data Adapter

Dim  sqladapterContactMgmt As New SqlDataAdapter("Select * From Contact",SqlConnectContactMgmt)

مرحله سوم : ايجاد يک Data Set

Dim dsContacts As New DataSet( )

مرحله چهارم : پر نمودن Data Set

sqladapterContactMgmt.Fill ( dsContacts , "Contact")

مرحله پنجم : نمايش اطلاعات در يک Data Grid

  DataGrid1.DataSource = dsContacts.Tables("Contact").DefaultView
  DataGrid1.DataBind( )
End Sub

بهنگام سازی  بانک اطلاعاتی در زمان اجراء 
همانگونه که اشاره گرديد ، ADO.NET از خصلت های DeleteCommand,InsertCommand و UpdateCommand مربوط به شی Adapterبرای بهنگام سازی بانک اطلاعاتی از طريق Data Set استفاده می نمايد . زمانی که يک Adapter در زمان اجراء ايجاد می گردد ، می بايست خصلت های فوق را در ابتدا ايجاد تا امکان فراخوانی متد Update مربوط به شی Adapter فراهم گردد . برای ايجاد خصلت های فوق در زمان اجراء مراحل زير را دنبال می نمائيم :

  • مقداردهی مناسب شی SelectCommand مربوط به Adapter .  تکنولوژی ADO.NET از خصلت CommandText مربوط به شیSelectCommand برای ايجاد تنظيمات لازم در ارتباط با خصلت های  InsertCommand,DeleteCommand  و UpdateCommandاستفاده می نمايد .

  •  ايجاد يک شی Command Builder برای شی Adapter . شی Command Builder  به نوع Data Provider بستگی دارد :OleDbCommandBuilder و SqlCommandBuilder .

کد زير نحوه بهنگام سازی يک بانک اطلاعاتی را نشان می دهد :

VB.NET ::Updating DataBase

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles MyBase.PreRender

مرحله اول : ايجاد Connection

Dim ContactMgmt As New SqlConnection ("Server=(local) ; database=Contact;Trusted_Connection=yes"
Dim  adapterContactMgmt As New SqlDataAdapter("Select * From Contact",ContactMgmt)

مرحله دوم : ايجاد يک Data Set

Dim dsContacts As New DataSet( ) 
adapterContactMgmt.SelectCommand.CommandText = "SELECT * FROM Contact"

مرحله سوم : ايجاد دستورات Insert ,Delete و Update بصورت اتوماتيک

Dim CmdContanctMgmt As SqlCommandBuilder = New SqlCommandBuilder ( adapterContactMgmt )

مرحله چهارم : ايجاد يک Row جديد

Dim rowInsert As DataRow = dsContacts.Tables("Contact").NewRow
  RowInsert("Fname") = "
مديريت سايت "
  RowInsert("Lname ") = "
مديريت سايت"
  RowInsert("Email ") ="Info@Srco.ir"
dsContacts.Tables ("Contact") .Row.Add(RowInsert)

مرحله پنجم : بهنگام سازی بانک اطلاعاتی

adapterContactMgmt.Update(dsContacts.Tables("Contact")

End Sub

در بخش سوم اين مقاله با نحوه استفاده از Data Set در فرم های وب ،آشنا خواهيم شد.



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

 

با استفاده از ADO.NET ، امکان اتصال به منابع داده متفاوت ، بازيابی ، پردازش و بهنگام سازی داده ، فراهم می گردد . ADO.NET از XML به منظور  انتقال داده بين برنامه ها و منابع داده استفاده می نمايد .ويژوال استوديو دات نت دارای امکانات متعددی به منظور دستيابی به بانک های اطلاعاتی (برخاسته از ADO.NET ) ، می باشد. پس از اتصال به يک بانک اطلاعاتی می توان با استفاده از مجموعه ای از اشياء ، خصلت ها و متدها ، صرفنظر از نوع بانک اطلاعاتی ، عمليات مورد نظر خود در ارتباط با يک بانک اطلاعاتی را انجام داد. در اين مقاله به بررسی  امکانات ويژوال استوديو دات نت به منظور اتصال به يک بانک اطلاعاتی و انجام عمليات متفاوتی همچون  خواندن ، تغيير و حذف رکوردهای موجود در يک بانک اطلاعاتی ، خواهيم پرداخت .

مبانی اوليه ADO.NET 
به منظور دستيابی به داده در 
ADO.NET
 ، سه لايه وجود دارد :

  • محل فيزيکی ذخيره سازی داده : لايه فوق می تواند يک بانک اطلاعاتی OLE ، يک بانک اطلاعاتی SQLو  يا يک فايل XML باشد .

  • ارائه دهنده داده : لايه فوق ، شامل شی Connection و اشياء  Command بوده و تصويری از داده ها را در حافظه ايجاد می نمايد.

  • Data set : لايه فوق ، رکوردهای بازيابی شده از يک منبع داده  را در خود نگهداری می نمايد. يک Data Set شامل رکوردهائی از يک و يا چندين جدول می باشد .

لايه ارائه دهنده داده ، واسطه بين محل ذخيره سازی داده و Data Set ، می باشد .Data Set مستقل از منبع داده است  .

در ADO.NET از دو نوع Connection به منظور اتصال به يک بانک اطلاعاتی ( با توجه به نوع بانک اطلاعاتی )  استفاده می گردد :

  • شی OleDbConnection که از آن به منظور ارتباط به يک بانک اطلاعاتی محلی  استفاده می گردد. اين نوع ارتباطات از شی OleDbDataAdapter به منظور اجرای دستورات و برگرداندن داده استفاده می نمايند .

  • شی SqlDbConnection که از آن به منظورارتباط  به يک بانک اطلاعاتی سرويس دهنده ، استفاده می گردد.اين نوع ارتباطات از شی SqlDbDataAdapter به منظور اجرای دستورات و برگرداندن داده استفاده می نمايند .

علاوه بر موارد فوق ، امکان دستيابی مستقيم به فايل های XML با استفاده از متدهای  ReadXML و WriteXMLمربوط به شی DataSet ، نيز وجود دارد. 
اشياء ، خصلت ها و متدهای حمايت شده توسط 
ADO.NET توسط سه namespace ارائه می گردد :

  • System.Data : در اين namespace کلاس ها ، نوع ها و سرويس های لازم به منظور ايجاد و دستيابی بهdata set و اشياء زير مجموعه آن وجود دارد .

  • System.Data.SqlClient : در اين namespace کلاس ها و نوع های لازم به منظور دستيابی به بانک های اطلاعاتی SQL Server ، وجود دارد.

  • System.Data.OleDb : در اين namespace کلاس ها و نوع های لازم به منظور دستيابی به بانک های اطلاعاتی OLE ، وجود دارد . 

در زمان دستيابی و استفاده از بانک های اطلاعاتی ( از طريق کد نوشته شده ) ، می بايست از عبارت Imports در ابتدای ماژول استفاده گردد .

VB.NET

Imports System.Data 
Imports System.Data.SqlClient    'For SQL database Connection
Imports  System.Data.OleDb        'For OLE DB database Connection

به منظور دستيابی داده از طريق ADO.NET ، مراحل زير را دنبال می نمائيم :

  • ايجاد ارتباط با بانک اطلاعاتی توسط  يک شی Connection

  • فراخوانی يک command به منظور ايجاد يک Dataset با استفاده از يک شی adapter

  • استفاده از شی DataSet  (در کد نوشته شده ) ، به منظورنمايش داده و يا تغيير آيتم های موجود در بانک اطلاعاتی

  • فراخوانی يک Command به منظور بهنگام سازی بانک اطلاعاتی از طريق DataSet با استفاده از يک شی adapter

  • غير فعال نمودن ( Close ) ارتباط ايجاد شده با بانک اطلاعاتی در صورتيکه ارتباط با بانک اطلاعاتی توسط متد Open فعال شده باشد .

در ادامه به تشريح هر يک از مراحل فوق خواهيم پرداخت .

ارتباط با بانک اطلاعاتی 
با استفاده از 
Server Explorer در ويژوال استوديو دات نت ، امکان ايجاد يک ارتباط با بانک اطلاعاتی فراهم می گردد. در اين رابطه مراحل زير را دنبال می نمائيم (در حالت  Design ) : 

  • فعال نمودن Server Explorer ( از طريق  View|Server Explorer )

  • در Server Explorer ، گزينه Connect To Database را انتخاب می نمائيم .در ادامه جعبه محاوره ایDataLink Properties  نمايش داده می شود.

 

  •  از طريق Provider Tab ، نوع بانک اطلاعاتی را مشخص می نمائيم . به صورت پيش فرض  ، OLE DB Provider for SQL Server  انتخاب شده است . در صورتيکه بانک اطلاعاتی تحت SQL Serverاجراء می گردد ، انتخاب پيش فرض درست می باشد . به منظور دستيابی به يک نوع ديگر بانک اطلاعاتی ، می بايست Provider  مربوطه را انتخاب نمود. مثلا" برای دستيابی به يک بانک اطلاعاتی اکسس ،Micosoft Jet 4.0 OLE DB انتخاب می گردد .

  • از طريق Connection Tab ، بانک اطلاعاتی مورد نظری که قصد برقراری ارتباط با آن وجود دارد را انتخاب می نمائيم  

  • پس از اعمال تنظيمات  لازم  با کليک نمودن بر روی دکمه Test Connection ، می توان از صحت تنظيمات انجام شده ، اطمينان حاصل نمود .پس از تست موفقيت آميز ارتباط ايجاد شده با بانک اطلاعاتی ، ويژوال استوديو دات نت ، ارتباط ايجاد شده را به Server Explorer اضافه می نمايد .

  •  با کليک نمودن بر روی علامت "+" ، آيتم های مربوط به بانک اطلاعاتی نمايش داده خواهند شد . برای مشاهده جداول ، می توان آيتم های مربوطه را تحت Data Connection فعال و در ادامه از طريق Tableو فعال نمودن آن ، جداول مربوط به بانک اطلاعاتی را مشاهده نمود.

  • برای افزودن يک آيتم به برنامه ، از طريق Sever Explorer آن را انتخاب و بر روی فرم وب  قرار می دهيم . در مواردی که يک جدول بر روی فرم وب مستقر می گردد ، ويژوال استوديو دات نت ، اشياءConnection و adapter را  به همراه تنظيمات مناسب ، ايجاد می نمايد.

ايجاد يک Data Set 
با استفاده از اشياء 
Connection و Adapter ( ايجاد شده در بخش قبل )، می توان يک Data set را ايجاد نمود. برای ايجاد يک Data set پس از استقرار در حالت Design ، مراحل زير را دنبال می نمائيم .

  • بر روی شی  adapter کليک سمت راست نموده و گزينه Generate Dataset را انتخاب می نمائيم . ويژوال استوديو در ادامه ، جعبه محاوره ای Generate Dataset را نمايش خواهد داد .

  • جداول مورد نظر را برای اضافه نمودن به Data set انتخاب کرده و در ادامه بر روی دکمه Ok کليک می نمائيم . ويژوال استوديو يک Data set جديد راايجاد و آن را به فرم وب اضافه می نمايد .

  • برای مشاهده داده موجود در Data set ، ( در حالت Desgin ) برروی شی DataSet کليک سمت راست نموده و گزينه View Schema را انتخاب می نمائيم . در ادامه Data Set در پنجره XML Designerنمايش داده می شود .

نمايش يک Data set 
برای نمايش يک 
Data Set بر روی يک فرم وب و در زمان اجراء ، مراحل زير را دنبال می نمائيم :

  • افزودن يک کنترل بر روی فرم وب به منظور نمايش  داده . مثلا" می توان يک کنترل DataGrid را به فرم وب اضافه نمود .

  • انتخاب Data set  به عنوان منبع داده برای کنترل . مثلا" برای کنترل DataGrid ، گزينه Property Builder را از طريق پنجره Properties انتخاب  و DataSource آن را به شی Dataset نسبت داده و خصلت DataMember را به يک جدول در Data Set نسبت می دهيم .

  • ستون های مورد نظر برای نمايش در کنترل را مشخص می نمائيم . برای کنترل DataGrid ، برروی آيتمColumns کليک نموده ( از طريق جعبه محاوره ای Properties ) و گزينه Create Columns Automaticlly At Run Time را غير فعال نموده ( Deselect ) و در ادامه ستون های مورد نظر برای نمايش را از طريق Available Columns list ، اضافه می نمائيم .( در اين مثال ، ستون های نام و آدرس پست الکترونيکی اضافه شده اند ) . 

  • اضافه نمودن کد لازم در روتين مربوط به رويداد Page_Load به منظور پر نمودن Data set از طريقData Adapter و  نسبت دهی داده از طريق شی DataSet برای کنترل . مثلا" کد زير باعث نمايش داده در کنترل DataGrid ( ايجاد شده در مرحله قبل ) می نمايد .

VB.NET

Private Sub Page_Load (ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
   SqlDataAdapter1.Fill ( SrcoDataSet11)
   DataGrid1.DataBind ( ) 
End Sub

  • پس از اجرای برنامه و لود شدن صفحه ، Dataset  نمايش داده می شود .

با توجه به اين که پر نمودن Data set و نسبت دهی داده به کنترل DataGrid از طريق رويداد Page_Load انجام می شود ، ضرورتی به نگهداری اطلاعات وضعيت  برای کنترل DataGrid وجود نخواهد داشت . با مقداردهی خصلت  EnableViewState به False ، کارائی برنامه بهبود می يابد.

تغيير رکوردها در يک بانک اطلاعاتی 
DataSet يک شی اصلی و مهم در ADO.NET بوده و هرگونه تغييرات شامل افزودن ، حذف و يا تغيير رکوردهای موجود در يک بانک اطلاعاتی عموما" از طريق شی فوق، انجام می شود . برای تغيير رکوردها از طريق يکDataSet مراحل زير را دنبال می نمائيم .

  •  دستيابی به شی Dataset ( مشابه روشی که به آن اشاره گرديد)

  •  تغيير DataSet

  • بهنگام سازی بانک اطلاعاتی از طريق DataSet توسط فراخوانی متد Update مربوط به شی Adapter

از مجموعه های Tables,Rows و Columns برای دستيابی به داده موجود در يک DataSet استفاده می گردد . در بخش دوم اين مقاله با نحوه استفاده از مجموعه های فوق به منظور ويرايش يک بانک اطلاعاتی ، آشنا خواهيم شد.



نوع مطلب :
برچسب ها : ,

0       
چهارشنبه 3 ارديبهشت 1393
ابوالفضل ظهوریان

یک زبان برنامه نویسی چیست؟

برای آشنایی با یک زبان برنامه نویسی تحت وب ابتدا لازم است تا تعریفی از یک زبان برنامه نویسی داشته باشیم.
زبان برنامه نویسی یک روش منطقی برای توصیف و شرح محاسبات می باشد. در واقع زبان برنامه نویسی نوعی از زبان می باشد که برای کامپیوتر قابل فهم است و می تواند محاسبات معنی داری را در کامپیوتر ها انجام دهد. زبان های برنامه نویسی وجود دارند به خاطر این که کامپیوتر نمی تواند به وسیله زبان های انسانی به طور قابل اعتمادی پردازش ها را انجام دهد.
در حال حاضر هزاران زبان برنامه نویسی وجود دارد. و یک برنامه نویس حرفه ای می تواند به راحتی از ۱۲ زبان استفاده کند.

در کل زبان های برنامه نویسی به ۲ بخش کلی تقسیم بندی می شوند:
۱- زبان های برنامه نویسی سیستمی
۲- زبان های برنامه نویسی تحت وب

 

۱- زبان های برنامه نویسی سیستمی: این زبان ها عموما برای برنامه های کاربردی در سیستم عامل ها مورد استفاده قرار می گیرند و یک زبان مختص اینترنت و وب محسوب نمی شوند. با وجود این از این زبان ها برای تعامل بین سیستم و اینترنت استفاده می کنند. برای مثال می توان زبان های C ، C# ، C++ ، Visual Basic را نمونه ای از این نوع زبان ها برشمرد.

۲- زبان های برنامه نویسی تحت وب: این زبان ها همانطور که از اسمش پیداست برای ساخت کدها و نرم افزار های تحت وب به کار گرفته می شوند، تعدادی از زبان های برنامه نویسی تحت وب عبارتند از: PHP ، ASP ، CSS، Perl ، CGI، Java script
نکته ای که این جا حائز اهمیت است همه زبان های بالا برای اجرا و کاربردی شدن نیاز به دستورات HTML دارند. البته HTML خود به تنهایی یک زبان برنامه نویسی تحت وب نیست. HTML در واقع حالت پایه ای برای قراردادن دستورات زبان های برنامه نویسی دیگر می باشد. به زبان ساده تر هر دستور و کدی برای اجرا شدن و نمایش دادن خروجی نیازبه استفاده از HTML دارد. پس با این اوصاف می توان گفت که HTML نشان دهنده نتیجه پردازش ها در سطح مرورگر و کاربر می باشد.
در این مطلب ما HTML رو عمدا به عنوان یک زبان در نظر گرفتیم.
اما سوالی که اینجا مطرح است که برای اینکه یک برنامه نویس حرفه ای وب بشیم باید چه چیز هایی بیاموزیم؟
شاید به جرئت بتوان گفت که یادگیری موارد زیر شما را به یک برنامه نویس حرفه ای وب و اینترنت تبدیل می کند.

۱- HTML / XHTML : این دو خیلی شبیه به هم هستند. در واقع باید گفت که XHTML حالت پیشرفته و ارتقا یافته HTML می باشد. از نظر دستورات و فرامین کاملا شبیه به همدیگر هستند ولی XHTML نسبت به HTML دقیق تر و حساس تر است. یادگیری این مورد کار سختی نیست. ولی برای شروع حرفه ای شدن لازم است. بسیاری از حرفه ای ها کار را از همین جا شروع کرده اند. شما هم می توانید، فقط نیاز به اندکی اعتماد به نفس و پشتکار دارید.

۲- CSS : این زبان یکی از مهمترین زبان ها برای یادگیری است. آموختن زبان CSS قطعا به شما پیشنهاد می شود. CSS می تواند تمام اطلاعات صفحه سایت شما را در برگیرد و باعث کاهش کد های HTML و کلاس بندی آنها شود. CSS می تواند در کاهش جداول تاثیر بسزایی داشته باشد به طوری که باعث کاهش حجم و بارگیری آسان صفحات سایت می شود. CSS دسترسی به کدها را آسان تر می کند و باعث می شود که صفحات انعطاف زیادی داشته باشند.

۳- JavaScript : جاوااسکریپت یک زبان اسکریپتی است. این زبان باعث تعامل بیشتری بین کاربران و صفحات سایت می شود.
جاوا اسکریپت را با زبان جاوا اشتباه نگیرید. این دو زبان های متفاوتی هستند.
با استفاده از این زبان شما می توانید با بازدیدکنندگان سایت ارتباط برقرار کنید و برای آنها فرم هایی ایجاد کنید تا بتوانند به پرسش ها و درخواست های شما جواب دهند. اما در نظر داشته باشید که این عملیات تنها در سطح مرورگر انجام می شوند و به خاطر همین جاوااسکریپت را یک قابلیت سمت سرویس گیرنده می گویند.
مثال هایی دیگر از کاربرد این زبان می توانند تغییر شکل نشانگر ماوس یا ریزش برف یا اشکال دیگر در صفحه سایت باشد.
توجه کنید که باید در به کاربردن جاوا اسکریپت دقیق و حساس باشید تا باعث رنجش بازدیدکنندگان سایت نشوید.

۴- PHP : بر خلاف جاوااسکریپت PHP یک زبان سمت سرویس دهنده است. این زبان به وسیله متغیر ها و توابع می تواند با ذخیره اطلاعات در پایگاه داده و پویاسازی صفحات سایت به کمک شما بیاید. PHP یک زبان متن باز (open source) است و بر روی هر دو سیتم عامل ویندوز و لینوکس عمل می کند،زبان PHP به پایگاه داده های مختلف قابلیت لینک دارد با این وجود بیشتر به پایگاه داده MySQL لینک می شود.
با استفاده از این زبان شما می توانید اطلاعات را از سرویس گیرنده (کاربر) بگیرید، این اطلاعات در سمت رویس دهنده (سرور) پردازش می شود و نتایج برای کاربر ارسال می شود. در این حالت است که ما می گوییم صفحات سایت حالت پویا و تعاملی پیدا کرده است.

۵- MySql : مای اس کیو ال یک پایگاه داده متن باز است که مکانی برای ذخیره و دسترسی به اطلاعات است. و نیاز به یک زبان اسکریپتی برای فراخوانی اطلاعات و درج آنها دارد. اکثر طراحان وب از زبان PHP برای این منظور استفاده می کنند.

۶- AJAX : آژاکس یا ای جکس فناوری جدیدی در دنیای وب می باشد. به کمک این فناوری شما می توانید صفحاتی بسازید که دیگر نیازی به Refresh شدن ندارند. اببته نمی شود به راحتی گفت آزاکس یک تکنولوژی جدید است. در واقع آژاکس چیز جدیدی ارائه نمی کند بلکه تلفیقی از چند تکنولوژی می باشد. هم اکنون سایت های بزرگی مثل google و orkut از آژاکس استفاده می کنند. بحث در مورد آژاکس در این مطلب نمی گنجد. امیدوارم در در آینده بیشتر در مورد آژاکس بحث خواهیم کرد.

۷-  ASP : این زبان نیز یک زبان سمت سرویس دهنده (سرور) است که فقط در در ویندوز ساپورت می شود. ASP نسل جدیدی از PHP است و تقریبا همان قابلیت های php را دارا می باشد. ASP هم از توابع و متغیرها برخوردار است و توانایی اتصال به پایگاه داده را هم دارد.

این ۷ مورد می تواند یک راهنمای خوب برای آینده شما باشند. اکثر حرفه ای ها این گونه حرفه ای شدند. البته یاد گیری نرم افزارهای طراحی مثل فتوشاپ و فلش هم می تواند در زیباسازی صفحات وب به شما کمک کنند.

منبع: http://parsism.com



نوع مطلب :
برچسب ها : طراحی سایت,

0       
شنبه 29 تير 1392
ابوالفضل ظهوریان

بدون نقشه جامع علمی ، درخت بی ميوه ايم

 

  روزنامه جام جم : طراحی و تصويب سند چشم‌انداز 20 ساله نظام جمهوری اسلامی ايران و طرح موضوع دستيابی به رتبه اول منطقه‌ای در عرصه علم و فناوری در اين سند و همچنين تربيت تعداد قابل توجهی سرمايه انسانی متخصص در حوزه‌های علمی مختلف طی 3 دهه گذشته، انگيزه و توانمندی لازم را برای ايجاد يک نهضت علمی فراهم آورده است.

 

  تاکيد مقام معظم رهبری بر لزوم طراحی نقشه جامع علمی کشور و توجه ويژه ايشان به مقوله علم، فناوری و نوآوری تحرک مناسبی در حوزه‌های سياستگذاری و برنامه‌ريزی فراهم کرد تا با مسووليت شورای‌عالی انقلاب فرهنگی و مشارکت ساير موسسات پژوهشی، دانشگاهی و حوزوی نقشه جامع علمی کشور طراحی شود.

 

  اگر همه چيز بر وفق مراد پيش برود و هيچ عاملی مانع انجام تصويب نقشه نشود، ظرف يک ماه آينده شاهد تصويب نهايی نقشه جامع علمی کشور خواهيم بود. اين نقشه که سرنوشت پرفراز و نشيبی داشته، در 2 نسخه پيشنهادی يکی توسط کميته تخصصی شورای‌عالی انقلاب فرهنگی و ديگری توسط وزارت علوم، تحقيقات و فناوری تهيه شده و قرار است مجموعه‌ای جامع يا هماهنگ و پويا از اهداف، سياست‌ها، برنامه‌ها و الزامات برنامه‌ريزی تحول راهبردی علم،‌ فناوری و نوآوری مبتنی بر ارزش‌های اسلامی ايرانی و آينده‌نگر برای دستيابی به اهداف چشم‌انداز کشور باشد. چند و چون تهيه اين نقشه از طرفی و لزوم توجه به آينده‌نگری به عنوان بخش مهم نقشه باعث ‌شد به سراغ دکتر آريا الستی، رئيس مرکز تحقيقات سياست علمی کشور و عضو کميسيون تلفيق نقشه جامع برويم و از او درباره همه آنچه در اين ميان کمتر مورد توجه قرار گرفته، بپرسيم.

  آيا واقعا تمام تحقيقات و مسائل مربوط به سياستگذاری علمی کشور در مرکز شما انجام می‌شود؟

  خير. مرکز ما يک موسسه پژوهشی است و به صورت هيات امنايی مثل ديگر دانشگاه‌ها و پژوهشگاه‌ها اداره می‌شود و وظيفه‌اش بيشتر مطالعات علم و فناوری و سياست‌سازی است؛ يعنی مسوولان و اعضای هيات علمی مرکز، در جايگاه تصميم‌گيری و سياستگذاری نيستند، بلکه وظيفه تصميم‌سازی و سياست‌سازی را به عهده دارند و نتايج کار آنها به طور طبيعی در اختيار سياستگذاران قرار می‌گيرد.

 

  به اين ترتيب در هر تصميم علمی که در کشور عنوان می‌شود به نوعی شما دخيل هستيد.

 

  به صورت طبيعی اين مرکز تحقيقاتی با وزارت علوم، ارتباط خيلی نزديکی دارد و در واقع مشتری اول نتايج تحقيقاتی اين مرکز معاونت پژوهشی وزارت علوم است. به همين دليل به صورت طبيعی اعضا و همکاران ما در کميته‌ها و کميسيون‌های تصميم‌گيری و سياستگذاری وزارت علوم حاضر هستند و نقش دارند. در تدوين طرح تحول علم و فناوری که وزارت علوم آن را به عنوان نقشه جامع علمی کشور تهيه و به شورای عالی انقلاب فرهنگی ارائه کرد، مرکز ما نقش جدی، هم از نظر پشتيبانی سازمانی، اداری، مالی و هم پشتيبانی علمی در اين زمينه داشت.

 

  به نقشه جامع علمی کشور اشاره کرديد، اما چه ضرورت‌ها و دلايلی باعث شد اين نقشه مورد توجه قرار بگيرد؟

 

  پس از فرمايشات مقام معظم رهبری در مرداد 85 درباره لزوم تهيه نقشه جامع علمی کشور، وظيفه تهيه اين نقشه از طرف خود ايشان در بهار 86 به شورای عالی انقلاب فرهنگی محول شد. از طرفی در وزارت علوم و موسسات وابسته به آن از جمله مرکز تحقيقات سياست علمی کشور فعاليت‌های مهمی از قبل شروع شده بود. بدين ترتيب بنا به تصميم وزير وقت علوم قرار براين شد که همه اطلاعات و نتايج فعاليت های انجام شده در مجموعه وزارت علوم در اختيار شورای عالی انقلاب فرهنگی قرار گيرد و خود دست اندرکاران اين موضوع نيز کاملا با اين شورا همکاری کنند. در شورا هم کميسيون تخصصی و کميته تلفيقی به وجود آمد که در آن وزارت علوم نقش جدی داشت. پس از گذشت چند ماه مديران و مسوولان وزارت علوم به اين نتيجه رسيدند که روند کار بر مبنای طرز تلقی وزارت علوم از نقشه جامع علمی کشور که يک تلقی کارشناسانه و منطبق با فرمايشات رهبری بود به پيش نمی‌رود. با اينکه چارچوب اصلی پيشنهاد وزارت علوم بود ولی روشهای تامين اطلاعات مورد نياز و فرآيندهای تصميم سازی و برنامه ريزی مورد قبول نمايندگان وزارت علوم نبود. به همين دليل با مشورتی که با دبير شورای عالی انقلاب فرهنگی انجام شد، به اين نتيجه رسيدند که هر 2 ديدگاه به صورت جداگانه پيش برود، بنابراين به وزارت علوم اجازه داده شد روند قبلی خود را که در قالب طرح تحول علم و فناوری بود، ادامه دهد. در نهايت 2 پيشنهاد برای نقشه جامع علمی کشور ارائه شد.

 

  آقای دکتر! به نظر می‌رسد شاخص‌ترين فعاليت مرکز شما همين مشارکت در تهيه نقشه جامع علمی کشور بوده است.

 

  بتازگی اين طور بوده است، اما کارهای ديگری هم در حال انجام است. به عنوان مثال يک طرح مهم ملی در مرکز ما در حال اجراست به نام پايلوت آينده‌نگاری مناسبترين فناوری‌های ايران 1404 که به صورت مختصر به پامفا 1404 معروف است. اين طرح حدود 2 سال است که در حال انجام است.

 

  به آينده‌نگری که يکی از مهم‌ترين بخش‌های نقشه و سند چشم‌انداز است، اشاره کرديد. به طور کلی اين آينده‌نگری بايد بر مبنای چه شاخص‌ها و اصولی انجام بگيرد و اصولا بهتر نبود پيش از تهيه نقشه جامع علمی کشور به بحث آينده‌نگری و رصد علم و فناوری طی سال‌های آينده می‌پرداختيم؟

 

  يکی از اسناد بالادستی که در اين آينده‌نگاری مورد توجه قرار گرفته، سند چشم‌انداز است. سند چشم‌انداز کليات و چشم‌اندازی را از آينده مطلوب علمی و فناوری کشور ترسيم کرده است. اما بهتر بود اين آينده نگاری پيش از تهيه نقشه جامع علمی کشور انجام می‌شد. البته نسخه نقشه جامعی که توسط وزارت علوم آماده شد يک بخش آينده‌نگاری نيز دارد اما نه به مبسوطی نتايج پامفا. اتفاقا همين گروهی که در مرکز ما طرح پامفا را انجام می‌دهند، بخش آينده‌نگاری پيش‌نويس نقشه جامع علمی کشور را هم آماده کردند. ولی خب زمان کم بود و بايد سريع‌تر به اهداف مربوط به نقشه می‌رسيديم. درست است که بخش آينده‌نگاری نقشه به صورت خلاصه و با روش‌های ديگری انجام شده، اما از نتايج اوليه اين طرح پامفا که 2 سال است روی آن کار تخصصی انجام می‌شود، استفاده کافی شده است. نتايج طرح پامفا در آينده هم در برنامه‌های مختلف استفاده خواهد شد. مثلا اگر به آخرين مراحل تدوين برنامه پنجم توسعه برسد، شايد در آنجا هم استفاده شود. اما مهم‌ترين فوايد انجام طرح پامفا از ديد من، يکی کسب تجربه انجام اين طرح ملی و پيچيده است و دوم تربيت يک گروه متخصص با تجربه کار ملی در اين زمينه است و سوم اينکه فرصتی پيش آمده که نتايج آينده نگاری و شيوه استفاده از آنها را به مسوولان و سياستگذاران علم و فناوری نشان می‌دهيم.

 

  اين کار مستلزم صرف هزينه و زمان است. آيا کسب اين تجربه ارزش گذشتن از اين 2 مقوله مهم را داشت؟

 

  نظر شما را به تجربه ديگر کشورها جلب می‌کنم؛ کشورهايی مثل ژاپن حدود 8 دوره از اين آينده‌پژوهی را پشت‌سر گذاشتند و کشورهای ديگر بدون استثنا مرحله يادگيری و استفاده از تجارب ديگران را داشته‌اند. به عنوان مثال کره‌ای‌ها از ژاپنی‌ها، فرانسوی‌ها از کره‌ای‌ها و آلمانی‌ها از ژاپنی‌ها استفاده کرده‌اند. آلمان‌ها برای دور اول آينده‌نگری، تيمی را به ژاپن فرستادند تا آموزش ببينند و پس از آن در دوره بعدی تيمی از ژاپن بر کارهای آنها نظارت داشت. برای اين که نرخ مشارکت خيلی پايين بود، انها اعلام کردند که اين دوره‌ها تجربی و آزمايشی بوده است.

 

  به کشورهايی همچون آلمان، ژاپن و کره جنوبی اشاره کرديد که با کمک يکديگر توانسته‌اند در اين مسير حرکت کنند. نمی‌دانم چرا ما نخواستيم رويه مشابه آنها را در پيش بگيريم.

 

  برای اولين بار در کشور نقشه می‌نويسيم و مطالعه آينده‌نگاری انجام می‌‌دهيم. به همين دليل هم کارها بطئی انجام می‌‌شوند، اما به همين مقدار که اين کار را شروع کرده‌ايم اميدوار کننده استلازمه اين موضوع صرف هزينه و بودجه کلان است. يکی از مشکلات ما اين بود که آشنايی چندانی در بين مديران و مسوولان کشور در اين خصوص وجود نداشت و توجيه نبودند و به همين دليل گرفتن بودجه مناسب برای چنين طرح عظيمی بسيار سخت بود. يکی از اهداف انجام اين طرح هم همين بود که اول نتايج را به مسوولان نشان بدهيم تا بتوانيم آنها را متقاعد کنيم. اين کار بايد به صورت مداوم انجام شود.

 

  حال اين پرسش مطرح می‌شود که آيا صرف هزينه برای ما اهميت داشت يا گذشت زمان و عقب ماندن از رقبا؟ پرسش ديگر اين که آيا نبايد از ابتدا زيرساخت‌های لازم برای پذيرش اين موضوع مهم ايجاد می‌شد؟

 

  مهم‌ترين زيرساخت برای اين طرح بودجه نيست و چند مساله ديگر نيز وجود دارد. در آينده‌نگاری ملی علم و فناوری يکی از مهم‌ترين زيرساخت‌ها وجود يک نهاد مجرب در انجام اين کار ملی است. اين نهاد بايد شامل متخصصينی باشد که چنين کاری را تجربه کرده، دانش آن را داشته، اطلاعات بين‌المللی خوبی در اين زمينه به دست آورده و نسبت به فرآيند کار کاملا مشرف باشند.

 

  مساله مهم بعدی اين است که بايد در ميان جامعه علمی فرهنگ‌سازی کرد که در اين طرح مشارکت کنند.

 

  منظور من هم همين بود. آيا نبايد جامعه علمی کشور را برای اين موضوع از قبل آماده می‌کرديم؟

 

  با همين طرح انجام شد. به همين دليل کار را با متانت جلوی می‌برديم و نتيجه آن کسب مشارکت 70 درصدی است که رقم بسيار بزرگی در مقايسه با تجربيات ديگر کشورها به حساب می‌آيد. در واقع انرژی قابل توجهی در فرهنگ‌سازی و تماس‌های مستقيم با حدود هزار دانشمند، پژوهشگر و مدير علم و فناوری صرف کرده‌ايم.

 

  در واقع سعی کرديد کشور را با موضوع درگير کنيد تا اين هدف به پيش برود؟

 

  بله. در انجام اين طرح بخش‌های بسياری از دستگاه‌‌ها به ما کمک و همفکری کردند. هر دستگاه يا مجموعه‌ای که به نوعی با اين موضوع مرتبط بود درگير اين پروژه شد.

 

  آقای دکتر! آينده‌نگاری، بخشی از نقشه و سند چشم‌انداز است و زمانی مطرح شده و کارهای روی آن صورت گرفته که حداقل حدود 5 سال از سند را پشت سر گذاشته‌ايم. آيا با وجود آينده‌نگاری می‌توانيم به جبران کردن زمان از دست رفته و همگام شدن با اهداف اميدوار باشيم؟

 

  نقشه جامع علمی کشور 3 سال پيش از سوی رهبر معظم انقلاب طرح شد. طبيعی است بدنه سياستگذاری و مديران علم و فناوری در کل کشور و بخصوص در وزارت علوم به زمان برای توجيه شدن نياز داشتند. خوشبختانه در وزارت علوم با همکاری مرکز ما، يک طرح تحول علم و فناوری شروع شده بود که تعاريف آن خيلی به فرمايشات رهبر معظم انقلاب نزديک بود و در موارد اختلاف هم وزارت علوم سعی کرد خيلی سريع با نظرات ايشان انطباق بدهد. به هر حال اين نقشه در واقع به نوعی يک سند نوآورانه است. نمونه‌ای دقيقا با اين تعريف در کشورهای ديگر وجود ندارد برای اين‌که چنين سند مهمی آماده شود و اين‌که برای جامعه علمی يا حداقل بخش قابل توجهی از بدنه علم و فناوری تعريف شود، به زمان نياز داشتيم. گفتگوها، بحث‌ها، مقالات، سخنرانی‌های مختلف صورت گرفت، تا اين که شورای عالی انقلاب فرهنگی مسوول اجرای اين کار شد. وزارت علوم هم وظيفه داشت کارهای خودش را پيش ببرد و به شورای عالی برای تصميم‌گيری نهايی ارائه کند که در واقع نقشه،‌ در حال حاضر در همين مرحله است.

 

  بنابراين اگر بخواهيم صحبت شما را دقيق‌تر کنيم به اين ترتيب می‌شود که 3 سال از آن قضيه گذشته است و الان هم حداقل 2 پيشنهاد روی ميز شورای عالی انقلاب فرهنگی است.

 

  پس به اعتقاد شما زمان زيادی نگذشته است. در حالی که 3 سال جامعه علمی ما درگير تدوين نقشه بوده است؟

 

  خير. از ديد شخصی من زمان زيادی گذشته است و در واقع نمی‌توانم بگويم کل مجموعه دست‌اندرکار در کشور در اين زمينه وقت تلف نکرده است. اين اتلاف وقت شايد به اين موضوع برگردد که رهبری مساله ای را فراتر از توان بالفعل کشور مطرح و استعداد کشور را به سمت انجام چنين مهمی سوق دادند. مدتی طول کشيد تا اين آمادگی به وجود بيايد و فهم درستی از تقاضاهای ايشان ايجاد شود. پس از آن ساز و کارها آماده و اجرا شدند. البته دوگانگی‌هايی هم در اين ميان به وجود آمد. مثلا در خصوص اين که اصلا چه مجموعه‌هايی بايد اين کار مهم را انجام دهند، اطلاعات مورد نياز برای تهيه نقشه به چه ترتيب بايد آماده شوند، و به طور کلی اصول و چارچوب‌های نقشه چيست، هنوز هم اختلاف نظر هست و کشور به يک اتفاق نظر نرسيده است. هر چند شايد اين يک ضعف باشد، اما يک واقعيت است و همين که ما بر مبنای فرمايش‌های مقام معظم رهبری به تکاپوی تهيه نقشه افتاديم و ضعف های خود را متوجه شديم و در جهت رفع آن گام برمی‌داريم، خود يک حرکت مثبت است. به هر حال کشور ما از لحاظ سياستگذاری علم و فناوری کاملا جوان است،‌ يعنی ما نهادهايی داريم که هر کدام توانايی انجام بخش هايی از زنجيره سياستگذاری علم و فناوری را دارند، اما تقسيم کاری متناسب در ميان آنها هيچ وقت انجام نشده، ضمن آن که تجربه بعضی از بخشهای اين زنجيره اصلا در کشور وجود ندارد. اگراين تقسيم کار ملی به خوبی انجام شود و زنجيره فعاليتهای سياستگذاری علم وفناوری بسته شود آنگاه کار به صورت دائم اتفاق خواهد افتاد و ما می‌توانيم ادعا کنيم که هر 3 سال يک بار برنامه‌ريزی علم و فناوری کشور که اسم آن را نقشه جامع علمی کشور گذاشته‌اند، بازنگری و تکميل می‌شود. اين طور نيست که ما يک برنامه را برای 20 سال آينده خود داشته باشيم و بعد برويم تا 20سال بعد. خير هر 3 سال بايد اين برنامه ارزيابی، بازنگری، بازنويسی و به اين ترتيب نقاط قدرت و ضعف آن مشخص شود.

 

  اين موضوع به شرطی درست است که ما فقط خودمان را ببينيم، اما وقتی کشور را با رقبا مقايسه می‌کنيم، چطور؟ آيا اين‌طور به نظر نمی‌رسد که ما در آرامش مشغول تدوين نقشه و سند هستيم و کشورهای ديگر بسرعت به سمت اهداف خود پيش می‌روند؟

 

  ما در زمينه برنامه ريزی علم وفناوری در منطقه کشوری پيشرو هستيم. البته ترکيه مدتی است اين کار را شروع کرده و به دليل تعاملات زيادی که با کشورهای ديگر دارد، کمی سريع‌تر کار را انجام داده است. اما آن ميزانی که ما تجربه ملی و بومی در اين زمينه کسب کرديم، آنها کسب نکرده اند. درست است در نوشتن اسناد، ارزيابی‌ها، آيند‌ه‌نگاری و تمام فرآيندهای مختلف سياستگذاری علمی و فناوری پيشرفت قابل ملاحظه‌ای دارند، اما هيچ کشوری به سرعت کشور ما تجربه ملی کسب نکرده است. من تاکيد می‌کنم ما اين کار را بومی کرده‌ايم.

 

  ما در دوره اول دقيقا کار ژاپنی‌ها را اجرا کرديم و متوجه شديم اين کار در کشور ما کاملا به شکست می‌انجامد و بعد فهميديم چرا آلمان‌ها 3 دوره آينده‌نگاری انجام دادند و هر 3 دوره را آموزشی و آزمايشی اعلام کردند که اعتباری ندارد و در واقع طی اين دوره‌ها روش‌های مناسب خودشان را تدوين کردند. ما سعی کرديم در اولين دوره بتوانيم اين کار را انجام بدهيم و به قول شما اين خود يک ميانبر بود.

 

  آيا اين آينده‌نگاری دقيقا براساس سند و نقشه پيش می‌رود؟ يعنی موضوعات آن به افق نهايی سند پرداخته يا به زمان جلوتر هم فکر کرده است؟

 

  در حال حاضر ما توانايی جلوتر رفتن را نداريم؛ البته گزارش‌ها نشان می‌دهند ژاپن روی افق 50 سال خود کار می‌کند. شايد در موضوع‌های سياسی افق 50 ساله وجود داشته باشد، اما در حوزه علم و فناوری کمتر کشوری توان تعيين افق بلندمدت را دارد. آنچه خيلی متداول است افق‌های 15 ساله يا 20 ساله است.

 

  پرسش من هم همين است که چرا 20 سال؟ آيا بهتر نبود زمان را کوتاه‌تر می‌کرديم و مثلا 10 ساله می‌شد؟

 

  اتفاقا 10 ساله متداول‌تر است. هر چه افق را نزديک‌تر کنيد اعتبار نتايج آينده‌نگاری هم بالاتر می‌رود.

 

  بله. شايد خيلی از افراد فکر کنند تا 20 سال آينده آنقدر زمان داريم که اگر در بخش‌هايی هم کم‌کاری کنيم باز هم زمان برای جبران داريم.

 

  درست است، اما ما چاره‌ای نداريم. بايد ببينيم 20 سال آينده دنيا به کجا می‌رود و ما می‌خواهيم به کجا برويم. برای رسيدن به آن چه کارهايی را بايد انجام دهيم. بعد بايد اين اولويت‌ها را تقسيم کرد در برنامه‌های 5 ساله و اين برنامه را هم حتی بايد به برنامه‌های دستگاهی يک ساله تقسيم کرد، يعنی هر دستگاهی برای خودش بايد برنامه يک ساله منطبق بر برنامه 5 ساله حوزه خودش داشته باشد. اين 5 سالها جمع می‌شوند و می‌رسيم به افق چشم‌انداز.

 

  اما آيا ما می‌توانيم افقی دقيق از آينده دنيا ترسيم کنيم. در حالی که می‌دانيم علم و فناوری دنيا نه‌تنها سال به سال و ماه به ماه بلکه ساعت به ساعت تغيير می‌کند و رو به جلو می‌رود.

 

  کاملا درست است. به همين دليل آينده‌نگاری کاری بسيار مشکل و پيچيده است. در اينجا بايد تاکيد کنم که آينده‌نگاری، پيش‌بينی نيست.

 

  در آينده‌نگاری برخی پيش‌بينی‌هايی اتفاق می‌افتد، اما منظور از آن نوشتن آينده است، چون آينده بر مبنای يک سلسله اعمالی است که ما امروز انجام می‌دهيم، يعنی شما با کارهايی که الان انجام می‌دهيد می‌توانيد آينده را شکل دهيد. بعضی از اين کارها اثرات کوچک و محلی دارند. بعضی اوقات اين کارها اثر کشوری، منطقه‌ای يا حتی جهانی دارد. اين طور می‌توانيم بگوييم که آينده بر اثر رفتار و اعمال امروز ما شکل می‌گيرد. اين که ما بخواهيم آينده خودمان را رقم بزنيم، احتياج به هم آهنگی ملی دارد. چرا که در حوزه علم و فناوری نمی‌توانيم دستوری عمل کنيم و بگوييم چون می‌خواهيم به اين موقعيت خاص برسيم آقای استاد، آقای مدير، آقای مخترع و. . . لطفا اين کارها را انجام دهيد. چنين چيزی ممکن نيست. در واقع استخراج علم و خلق فناوری در مغزهای جامعه ايجاد می‌شود، بنابراين بايد آنها را با برنامه کلی همراه کرد. پس آينده مطلوب را بايد بر مبنای وفاق ملی و دسته‌جمعی به وجود بياوريم و برای اين کار بايد اذهان جامعه علمی را آماده کرد.

 

  به نظر می‌رسد وقتی سند چشم‌انداز مطرح می‌شود هم، دستوری عمل می‌کنيم و اهداف را برای زمان مشخص تعيين می‌کنيم.

 

  بله و البته به همين ترتيب تفاوت‌ها مشخص می‌شود. طرح آينده‌نگاری يک فعاليت از پايين به بالاست، يعنی نظرات و پيش‌بينی‌ها و آرمان‌های جامعه جمع می‌شوند و بعد بر مبنای آنها تصميماتی در حوزه‌های سياستگذار گرفته می‌شود و در قالب اسناد از بالا به پايين ابلاغ می‌شود. اگر ما کار اول را انجام ندهيم، يعنی اسناد و مقررات ما بر مبنای مطالعات از پايين به بالا ارائه نشود به يک دستورالعمل و ابلاغيه تبديل می‌شود که ما را به هيچ کجا نخواهد رساند و اطمينان می‌دهم در حد دستور، يک سری تحرکاتی اتفاق می‌افتد، اما به افقی که می‌خواهيم، نمی‌رسيم.

 

  شما فکر نمی‌کنيد که در حال حاضر هم به چنين وضعيتی دچار هستيم؟

 

  از ديد من اين تازه شروع است و ما اين فرآيند زنجيره ای را هنوز تکميل نکرده‌ايم و هنوز فرايند آينده نگاری از پايين به بالا و سياستگذاری از بالا به پايين به صورت روند معمول کشور نشده است. بهر حال واقعيت اين است که برای اولين بار در کشور نقشه می‌نويسيم و مطالعه آينده‌نگاری انجام می‌‌دهيم. به همين دليل هم کارها بطئی انجام می‌‌شوند، اما به همين مقدار که اين کار را شروع کرده‌ايم اميدوار کننده است. بايد ديد اين بطئی بودن به چه دليل است و ما چه چيزی به دست می‌آوريم و بابت آن چه هزينه‌ای می‌پردازيم. هزينه‌ای که بابت آن پرداخت می‌کنيم همين است که شايد از کشورهای ديگر عقب بمانيم و در اين زمينه حرف شما تا حدی درست است. اما آنچه کسب می‌کنيم اين است که يک تجربه کاملا بومی بدست ميآوريم. اين‌که مستقيم با کشورهای صاحب تجربه ارتباط داشته باشيم، يعنی امکان آموزش‌های بين‌المللی برای همکاران ما وجود داشته باشد، ايده آل است ولی در شرايط فعلی محدوديت ها زياد است و همين طور بودجه کافی برای اين قضايا در اختيار نداريم. در ضمن تيم‌های ناظر بر کارهای ما هم وجود ندارند و جزو نقيصه‌های ما محسوب می‌شود. با اين شرايط کار بزرگی است که ما بياييم کار را شروع کنيم و تجربه کسب کنيم و بکوشيم تمام مراحل و فرآيندها را اجرا کنيم و در اين فرصت به تجربيات ملی و بومی خودمان برسيم.

 

  يعنی برخی محدوديت‌ها باعث شده ما بومی عمل کنيم که اين موضوع اتفاقا از ديد شما اتفاقی مثبت است.

 

  بله. نکته اين است که ما خودمان را با خودمان مقايسه می‌کنيم. ما يک کشور انقلاب کرده با همت و سطح توقع بالا هستيم و انتظارات زيادی از خودمان داريم. به همين دليل همواره احساس می‌کنيم که عقب هستيم وتا اينجا اين احساس خوبی است چون محرک به جلو است. اما نبايد اين باعث شود که اعتماد به نفس خودمان را از دست بدهيم و احساس کنيم رو به پيشرفت نيستيم. نه اين‌طوری نيست. اگر به دور و برمان نگاه کنيم می‌بينيم که ما در خيلی حوزه ها سعی و تلاش می‌کنيم و موفق هستيم. اگر اين‌طور نبود که ديگران اينقدر نسبت به کشور ما شتابزده و هراسان عمل نمی‌کردند.

 

  در نهايت شما کاملا اميد داريد که اين زنجيره تکميل شود؟

 

  شايد ما در بخش‌هايی از نقشه دچار ضعف باشيم، اما همين‌که ضعفهای اطلاعات خود را مشخص کرديم و برای رفع آن گام برداشتيم، اين يک حرکت مثبت است چاره‌ای نداريم. اگر اين موضوع محقق نشود آن‌وقت است که بايد نگران شويم. البته من در اين باره خوشبين هستم زيرا بالاترين مقام کشور، بيشترين پيگيری را در اين زمينه انجام می‌دهد. اين نقطه قوت کار است. بعد از ايشان اگر هر نهادی به اين نوع برنامه‌ريزی اعتقادی نداشته باشد يا کوتاهی و کارشکنی کند، تنها مشکلی کوچک محسوب می‌شود، زيرا عزم ملی برای پيشبرد اهداف توسعه علم و فناوری بر اساس يک برنامه مدون به وجود آمده است. در حال حاضر همه مشغول بحث درباره تقسيم کار ملی هستند که آن هم طبيعی است. من واقعا در دوره دولت دهم و در دوره برنامه پنجم اميدوارم که اين اتفاق بيفتد. در غير اين‌صورت من هم جزو کسانی خواهم شد که معتقدند خيلی عقب مانده‌ايم و وقت را تلف کرده‌ايم. تا الان وقتی اتفاقاتی که پيش آمده را بررسی می‌کنم آنها را در يک فرآيند يادگيری ملی طبيعی می‌دانم، اما در حال حاضر تمام زيرساخت‌ها را به وجود آورده‌ايم و موقع آن است که نخ تسبيح را وارد دانه‌ها بکنيم و اين زنجيره بسته بشود و به صورت روند دائم دربيايد.

 

  خيلی‌ها معاونت علمی رياست جمهوری را کاتاليزور و نخ تسبيح ‌در ميان اين فعاليت‌ها می‌دانند. آيا شما فکر نمی‌کنيد بودجه‌های پژوهشی که دست معاونت است می‌تواند اين روند را سرعت ببخشد؟

 

  برداشت من اين است که معاونت علمی هم می‌تواند بخشی مهم از قضيه باشد، اما معاونت علمی را نخ تسبيح نمی‌دانم.

 

  چرا؟ مگر بيشترين سهم بودجه حوزه علم و فناوری در حال حاضر در دست معاونت نيست؟

 

  يکی از بحث‌های رايج در کشور هم همين است. به هر حال نظر من و همکارانم در وزارت علوم بيشتر به اين نکته معطوف است که توسعه و پيشرفت علم و فناوری 2 بخش عمده دارد.

 

  يکی فشار علم و فناوری است و ديگری کشش بازار و اقتصاد. بخش اول در حيطه وظايف شورای عالی علوم، تحقيقات و فناوری است که با محوريت اجرايی وزارت علوم و همکاری و همفکری ساير دستگاه ها قابل انجام است.

 

  اما بخش دوم به اين موضوع باز می‌گردد که اگر علم و فناوری را توليد کنيم ولی آنها کاربردی در جامعه نداشته باشند بعد از مدتی ريشه همين نهضت توليد علم هم خشک خواهد شد. يعنی نوآوری بدون شکوفايی يا علم بدون عمل يا کشت درخت بدون برداشت ميوه که همه آنها دير يا زود محکوم به شکست خواهند بود. نکاتی که مقام معظم رهبری می‌فرمايند بسيار حکيمانه است. ايشان اصرار دارند به نوآوری و شکوفايی. آن شکوفايی در اصطلاح سياستگذاری علم و فناوری همان کشش بازار يا تقاضای جامعه است.

 

  يعنی کاهش شکاف بين صنعت و دانشگاه؟

 

  صنعت هم يک بخش از جامعه است. بخش‌های مختلف جامعه نياز به ارتباط با دانشگاه دارند زيرا دچار مشکل هستند. به عنوان نمونه بانک‌های ما مشکل دارند. ما در حوزه‌های علميه و دانشگاه‌هايمان، علمی درباره بانکداری اسلامی داريم، اما در بانک‌ها کاربرد پيدا نمی‌کند. در فرهنگ هم همين‌طور. اگر بين اينها پلی به وجود نيايد مشکلات ما حل نخواهد شد. دولت ما بخش علم و فناوری را مرتب تشويق می‌کند، اما دولت بخشی از جامعه است و در واقع جامعه بايد متقاضی اين امر باشد. در کشورهايی که در اصطلاح توسعه پايدار در آنها ايجاد شده 20 درصد نقش دولت است و 80 درصد باقيمانده را بخش‌های مردمی شامل می‌شوند. بنابراين ما در کاربردی کردن علم و فناوری در جامعه به صورت عمومی و ايجاد تقاضا موفق نبوده‌ايم. در واقع کاربردی شدن علم و فناوری بخشی مغفول در نهادها و سازمان‌های ماست. اين وظيفه بخوبی توسط نهاد معاونت علم و فناوری رياست جمهوری می‌تواند انجام شود، چون برای اين کار احتياج به اختيارات رئيس‌جمهور است. اگر اين تقسيم کار بخوبی اتفاق بيفتد ما می‌توانيم شاهد يک توازن باشيم به همين علت است که معتقديم صحيح نيست معاونت علم و فناوری در زمينه‌های پژوهش اقدام و تصميم‌گيری کند و در نهايت توزيع بودجه را به عهده داشته باشد. اينها در جهت متمايل کردن اين نهاد مهم از فعاليت دوم (ايجاد تقاضا در تمام آحاد جامعه) به فعاليت اول (توليد علم و فناوری) است. فعاليت اول در حال حاضر متصدی دارد و اگر به کندی پيش می‌رود بايد کمک کنيم تا روند سريع‌تری را در پيش بگيرد. نبايد به عنوان نهاد دوم کار موازی انجام دهيم. فعاليت دوم است که در کشور مغفول مانده و فعاليت مهمی است و بدون آن امکان ندارد علم و فناوری کشور روند رو به توسعه‌ای داشته باشد. ما تا کی می‌توانيم علم و فناوری را از طريق بودجه دولت و بودجه نفت اداره کنيم. مطمئنا بسرعت اين سرمايه‌ها به انتها خواهد رسيد و اصلا ممکن است دولتی روی کار بيايد که هيچ انگيزه‌ای برای اين کار نداشته باشد و ترجيح دهد بودجه را در جاهای ديگر خرج کند، بنابراين توسعه علم و فناوری روی زمين خواهد ماند.

 

  اجازه دهيد با يک مثال نظرم را روشن‌تر کنم. فرض کنيد که می‌خواهيد آتشی روشن کنيد. ابتدا هيزم اندکی (توان فعلی علمی کشور) جمع می‌کنيد. اين هيزم با کبريت روشن نمی‌شود، بنابراين نفت و بنزين (بودجه حمايتی دولت) روی آن می‌ريزيد. شايد برای چند بار معدود لازم باشد اين کار را انجام دهيد. وقتی آتش را روشن کرديد فعل و انفعالات شيميايی انجام می‌شود و بعد انرژی و گرمای توليد شده خودش به سوزاندن بقيه مواد کمک می‌کند. در واقع لازم نيست مرتب روی آتش نفت بريزيد. وضعيت فعلی ما هم همين‌طور است و دائم به پای فعاليت‌های علم و فناوری کشور نفت (بودجه دولتی) می‌ريزيم. اين نفت فقط برای يک دوره کوتاه لازم است و بايد دولت در مراحل اوليه اين بودجه را تزريق کند و در واقع بودجه 3 درصد Gpd برای تقويت علم و فناوری تا يکی دو دوره برنامه 5 ساله لازم است، اما در اين مدت لازم داريم هيزم (کشش بازار يا تقاضای جامعه) تهيه کنيم و اين هيزم‌ها باعث شوند فعاليت به صورت خودکار و دائم ادامه پيدا کند و اين زنجيره تکميل شود. منظور از فراهم آوردن هيزم همان فعاليت دوم (ايجاد تقاضای واقعی علم و فناوری در تمام بخشهای جامعه) است که متاسفانه در اين زمينه بسيار ضعيف هستيم.

 

  پس شما هم معتقديد با تزريق بودجه دولتی اين شکاف گسترش بيشتری پيدا می‌کند؟

 

  تصور کنيد به جای اين که يک نفر هيزم بياورد و نفر ديگر نفت را برای روشن شدن اوليه فراهم کند هر 2 در کنار هم فقط روی آتش نفت بريزند. در چنين شرايطی نفت بسرعت تمام می‌شود و آتش هم خاموش می‌شود. به همين دليل نظر شخصی من اين است که نهاد معاونت علم و فناوری نهاد بسيار مهمی است و اگر به موضوعات نوع دوم که مربوط به ايجاد تقاضا و کاربرد علم و فناوری در جامعه است بپردازد مهم‌‌ترين و مغفول‌ترين بخش اين کار را انجام داده است، اما اگر بخواهد موازی کاری انجام دهد و اقداماتی که در شان دستگاه‌هاست نه رئيس‌جمهور توسط اين نهاد انجام بشود نه‌تنها روند زنجيره را دچار اشکال می‌کند،‌ بلکه در برخی موارد به تقابل هم می‌انجامد.

 

  برگرديم به نقشه‌، که قرار است تا يک ماه ديگر تصويب شود. در کل شما معتقديد که اين نقشه قطعی نيست؟

 

  هيچ وقت نقشه قطعی نخواهيم داشت و در واقع اين پيش‌نويس نقشه است که بايد با وجود مقداری نقص به تصويب برسد. سپس بايد دوره‌ای را تعيين کرد که هر 2 يا 3 سال بازنويسی شود و مطالعات لازم برای بازنويسی آن انجام شود.

 

  به نظر شما با تصويب نقشه و ارائه آن به نهادها و سازمان‌های مربوطه می‌توانيم به سرعت بيشتر چرخه علم و فناوری در کشور اميدوار باشيم؟

 

  وزارت علوم، و ساير نهادهايی که پيشنهادی را آماده کردند به شورا ارائه داده اند. تا آنجا که اطلاع دارم به صورت هفتگی در حال بررسی است. اميدوارم طی دو سه ماه آينده شورا تصميم نهايی را بگيرد. اين يک قانونی می‌شود که هر مجموعه‌ای وظيفه دارد جايگاه خود را در آن مشخص کند و برنامه‌های خودش را بر مبنای آن تعيين نمايد و تقسيم کارها بر اساس آنچه که در نقشه جامع پيش بينی شده انجام می‌شود. طبيعی است که با انجام اين تقسيم کار ملی و نظارت و ارزيابی مراجع ذيصلاح اميد است روند پيشرفت علم و فناوری دارای يک آهنک يکنواخت و سريع‌تر از گذشته شود.

 

  منبع جام جام : بهاره صفوی

  دوشنبه 23 شهريور 1388 - ساعت 00:01شماره خبر: 100917286136



نوع مطلب :
برچسب ها : بدون نقشه جامع علمی ، درخت بی ميوه ايم,

0       
دوشنبه 17 تير 1392
ابوالفضل ظهوریان

Tags reference table

NameSyntaxPurposeExample
Bold [b]{text}[/b] Makes {text} bold Bold example
Italic [i]{text}[/i] Makes {text} italic Italic example
Underline [u]{text}[/u] Underlines {text} Underline example
Line-through [s]{text}[/s] Create a line-through/strike through on {text} Line-through example
Font-size [size={number}]{text}[/size] Changes the font-size of {text} Font-size example
Font colour [color={colour}]{text}[/color] Changes the colour of {text} Font colour example
Center text [center]{text}[/center] Centers {text} on screen Center text example
Quote [quote]{text}[/quote] Creates a quotation box containing {text} Quote example
Quote (named) [quote={name}]{text}[/quote] Creates a quotation box quoting {name} as saying {text} Quote (named) example
Link [url]{url}[/url] Makes a link to {url} Link example
Link (named) [url={url}]{text}[/url] Makes a named link to {url} Link (named) example
Image [img]{url}[/img] Shows the image indicated by {url} Image example
Image (resized) Full version: [img width={width} height={height} ...]{url}[/img]
Another variant (shorthand): [img={width}x{height}]{url}[/img]
Shows {url} image resized to {width} and {height} Image (resized) example
List Unordered list: [ul]{items}[/ul]
Ordered list: [ol]{items}[/ol]
Another variant: [list]{items}[/list]
Displays a list of {items} List example
List item [li]{text}[/li]
Shorthand: [*]{text}newline
Species an {item} within a list List item example
Code [code]{text}[/code] Renders the {text} while maintaing all white spacing Code example
Tables [table]{rows}[/table] Show a table with {rows} in it Tables example
Table rows [tr]{cells}[/tr] Renders a table row containing {cells} Table rows example
Table content cells Heading cell: [th]{content}[/th]
Content cell: [td]{content}[/td]
Shows {content} in a table (heading) cell Table content cells example
Youtube videos [youtube]{id}[/youtube] Shows the youtube video indicated by {id} Youtube videos example
Google videos [gvideo]{id}[/gvideo] Shows the google video indicated by {id} Google videos example

به نقل از; http://www.bbcode.org



نوع مطلب :
برچسب ها : BBCode tags reference,

0       
يکشنبه 16 تير 1392
ابوالفضل ظهوریان


صفحه قبل 1 صفحه بعد