تبدیل Sql 2000 به Sql 2005

arashkey

Member
در متون سایت جستجو کردم ولی تاپیکی که مربوط به این قسمت باشد یافت نکردم
می تونستم در تاپیک های دیگر یک جوری بپرسم منتها به خاطر پرکاربرد بود و همچنین نامربوط بودن موضوع ترجیح دادم یک تاپیک مجزا باز کنم.
اول یک پیشنهاد به دست اندرکاران سایت مجید آنلاین:
چون مطالب مربوط به دیتابیس زیاد هستند در صورت امکان یک انجمن جداگانه برای دیتابیس و کار کردن با آن ایجاد کنند
و اما سوال من
من یک سایت با asp.net طراحی کردم . در زمان ساخت سایت از sql server 2000 استفاده کردم. در تمامی قسمتها از یک کلاس برای وصل شدن به بانک استفاده کردم. پس از پایان ساخت سایت و ارسال آن برای مشتری ، اون به من گفت که سرورها کمی هستند که از sql server 2000 پشتیبانی می کنند. پس در نتیجه من باید از بانک sql 2005 استفاده کنم.
حال نکاتی که برای تغییر باید رعایت کنم به من بفرمایید. در صورت امکان این کلاس که در قسمت پایین براتون می زارم رو نگاه کنید و اگر می شه تغییرات لازم رو بگید.
کد:
************************************************************
'                               In the name of god
'                   This Class Help you to use ADO.Net 2.0 
'                               Provider: Niloufar
'   ************************


Imports System
Imports System.Data

Public Class clsADO
    'Public part

    ''' <summary>
    ''' This Constractor is for MsAccess DataBases
    ''' </summary>
    ''' <param name="strPathAndFileName">MsAccess DataBase full file name (Path\FileName)</param>
    ''' <param name="strPassword">MsAccess Password</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strPathAndFileName As String, ByVal strPassword As String)
        DataBaseType = DataBaseTypes.MsAccess
        strlocalPathAndFileName = strPathAndFileName
        strlocalPassword = strPassword
    End Sub

    ''' <summary>
    ''' This constractor is for MsSqlServer DataBases
    ''' </summary>
    ''' <param name="strServerName">MsSqlServer Server Name</param>
    ''' <param name="strDataBaseName">DataBase Name</param>
    ''' <param name="strUserId">User Id</param>
    ''' <param name="strPassword">Password</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strServerName As String, ByVal strDataBaseName As String, ByVal strUserId As String, ByVal strPassword As String)
        DataBaseType = DataBaseTypes.MsSqlServer
        strlocalServerName = strServerName
        strlocalDataBaseName = strDataBaseName
        strlocalUserId = strUserId
        strlocalPassword = strPassword
    End Sub

    ''' <summary>
    ''' This constractor is for Oracle DataBases
    ''' </summary>
    ''' <param name="strSID">Oracle System Identifier</param>
    ''' <param name="strUserId">User Id</param>
    ''' <param name="strPassword">Password</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal strSID As String, ByVal strUserId As String, ByVal strPassword As String)
        DataBaseType = DataBaseTypes.Oracle
        strlocalSID = strSID
        strlocalUserId = strUserId
        strlocalPassword = strPassword
    End Sub

    ''' <summary>
    ''' Dispose this class
    ''' </summary>
    ''' <param name="Disposing">Set to TRUE if you want to dispose any objects used in this class and set them to nothing</param>
    ''' <remarks></remarks>
    Public Overloads Sub Dispose(ByVal Disposing As Boolean)
        If Not Me.Disposed Then
            If Disposing Then
                If Not objConnection Is Nothing Then
                    If objConnection.State <> ConnectionState.Closed Then
                        objConnection.Close()
                    End If
                    objConnection.Dispose()
                    objConnection = Nothing
                End If
                If Not objCommand Is Nothing Then
                    objCommand.Dispose()
                    objCommand = Nothing
                End If
                If Not objDataAdapter Is Nothing Then
                    objDataAdapter.Dispose()
                    objDataAdapter = Nothing
                End If
                Me.Disposed = True
            End If
        End If
    End Sub

    ''' <summary>
    ''' Get a DataTable object by a text query
    ''' </summary>
    ''' <param name="strQuery">SELECT query that you want to fill DataTable by this query</param>
    ''' <returns>DataTable object filled by entered query</returns>
    ''' <remarks></remarks>
    Public Function GetDataTableByQuery(ByVal strQuery As String) As DataTable
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName, strlocalPassword)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.Text
        InitializeCommand(strQuery)
        Try
            objDataAdapter = New OleDb.OleDbDataAdapter(objCommand)
            Dim objDataTable As New DataTable
            objDataAdapter.Fill(objDataTable)
            Return (objDataTable)
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' Execute any text query (Select, Insert, Update, Delete) and return the number of rows affected by this query
    ''' </summary>
    ''' <param name="strQuery">Text query that you want to execute it</param>
    ''' <returns>The number of rows affected by entered query</returns>
    ''' <remarks></remarks>
    Public Function ExecuteQuery(ByVal strQuery As String) As Integer
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName, strlocalPassword)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.Text
        InitializeCommand(strQuery)
        Try
            ExecuteQuery = objCommand.ExecuteNonQuery
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' You should call this sub befor getting DataTable or execute StoredProecedure for adding parameters of StoredProcedure
    ''' </summary>
    ''' <param name="SPName">StoredProcedure Name that you want Execute it</param>
    ''' <remarks></remarks>
    Public Sub InitializeStoredProcedure(ByVal SPName As String)
        Select Case DataBaseType
            Case DataBaseTypes.MsAccess
                Call OpenMsAccessConnection(strlocalPathAndFileName, strlocalPassword)
            Case DataBaseTypes.MsSqlServer
                Call OpenMsSqlServerConnection(strlocalServerName, strlocalDataBaseName, strlocalUserId, strlocalPassword)
            Case DataBaseTypes.Oracle
                Call OpenOracleConnection(strlocalSID, strlocalUserId, strlocalPassword)
        End Select
        CommandType = Data.CommandType.StoredProcedure
        InitializeCommand(SPName)
    End Sub

    ''' <summary>
    ''' Add a Parameter of StoredProcedure. Note: you should call the InitializeStoredProcedure sub befor using this sub
    ''' </summary>
    ''' <param name="Name">Parameter name</param>
    ''' <param name="Type">Parameter type</param>
    ''' <param name="Size">Parameter size</param>
    ''' <param name="Value">Parameter value</param>
    ''' <remarks></remarks>
    Public Sub AddParameter(ByVal Name As String, ByVal Type As OleDb.OleDbType, ByVal Size As Integer, ByVal Value As Object)
        Try
            objCommand.Parameters.Add(Name, Type, Size).Value = Value
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    ''' <summary>
    ''' Get DataTable Object by Execute the StoredProcedure that you enter it in the InitializeStoredProcedure sub. Note: you should call the InitializeStoredProcedure sub befor using this function
    ''' </summary>
    ''' <returns>DataTable object filled by entered StoredProcedure</returns>
    ''' <remarks></remarks>
    Public Function GetDataTableByStoredProcedure() As DataTable
        Try
            objDataAdapter = New OleDb.OleDbDataAdapter(objCommand)
            Dim objDataTable As New DataTable
            objDataAdapter.Fill(objDataTable)
            Return (objDataTable)
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function

    ''' <summary>
    ''' Execute the StoredProcedure that you enter it in the InitializeStoredProcedure sub. Note: you should call the InitializeStoredProcedure sub befor using this function
    ''' </summary>
    ''' <returns>The number of rows affected by entered StoredProcedure</returns>
    ''' <remarks></remarks>
    Public Function ExecuteStoredProcedure() As Integer
        Try
            ExecuteStoredProcedure = objCommand.ExecuteNonQuery
        Catch ex As OleDb.OleDbException
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Function
    'Private part

    Private Enum DataBaseTypes As Byte
        MsAccess = 1
        MsSqlServer = 2
        Oracle = 3
    End Enum

    Private CommandType As CommandType = CommandType.Text

    Private Disposed As Boolean
    Private DataBaseType As DataBaseTypes
    Private strlocalPathAndFileName As String
    Private strlocalServerName As String
    Private strlocalDataBaseName As String
    Private strlocalSID As String
    Private strlocalUserId As String
    Private strlocalPassword As String

    Private objConnection As OleDb.OleDbConnection
    Private objCommand As OleDb.OleDbCommand
    Private objDataAdapter As OleDb.OleDbDataAdapter

    Private Sub OpenMsAccessConnection(ByVal strPathAndFileName As String, ByVal strPassword As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
                                            "Data Source=" & strPathAndFileName & ";" & _
                                            "Jet OLEDB:Database Password=" & strPassword
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub OpenMsSqlServerConnection(ByVal strServerName As String, ByVal strDataBaseName As String, ByVal strUserId As String, ByVal strPassword As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=SQLOLEDB;" & _
                                            "Data Source=" & strServerName & ";" & _
                                            "DataBase=" & strDataBaseName & ";" & _
                                            "User ID=" & strUserId & ";" & _
                                            "Password=" & strPassword & ";"
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub OpenOracleConnection(ByVal strSID As String, ByVal strUserId As String, ByVal strPassword As String)
        objConnection = New OleDb.OleDbConnection
        objConnection.ConnectionString = "Provider=MSDAORA;" & _
                                            "Data Source=" & strSID & ";" & _
                                            "User ID=" & strUserId & ";" & _
                                            "Password=" & strPassword & ";"
        Try
            objConnection.Open()
        Catch ex As OleDb.OleDbException    'Connection-Level Exceptions
            Throw New Exception(ex.Message, ex.InnerException)
        Catch ex As InvalidOperationException   'Trying to open a connection that is already opened
            Throw New Exception(ex.Message, ex.InnerException)
        End Try
    End Sub

    Private Sub InitializeCommand(ByVal strQueryOrSPName As String)
        Try
            objCommand = New OleDb.OleDbCommand(strQueryOrSPName, objConnection)
            objCommand.CommandType = CommandType
        Catch ex As Exception
            Throw New System.Exception(ex.Message, ex.InnerException)
        End Try
    End Sub
End Class
و اما مشکل بعدیم کار کردن با SQL Server 2005
متاسفانه من نتونستم به خوبی SQL 2000 از SQL 2005 استفاده کنم. من یک پک کامل 10 تایی دات نت رو خریدم. دو سی دی انتهایی SQL 2005 بود. با این حال الان یک SQL 2005 نسخه اینترپرایز رو خریدم تا مطمئن بشم. تنها محیط هایی که من تو SQL 2000 با هاشون کار می کردم Enterprise Manager (باهاش بانکام و جداولم رو می ساختم) و Query Analyzer بود که باهاش Query مورد نیازم رو می ساختم. اما در SQL 2005 هیچ قسمتی نبود که حتی شبیه به یکی از این محیط ها باشه. کل گزینه هایی که برای من نصب شده این موارده

کد:
       SQLServer            
        Analysis Services                                                 ?
        Configuration Tools                                               ?

        Documentation and Tutorials                                       ?

        Performance Tools                                                 ?

        SQL Server     2005  Upgrade Advisor
        SQL Server Business Intelligence Development Studio

        SQL Server Management Studio
اگه شما بتونید کمکم کنید خیلی ممنون می شم. از یکی از دوستان سوال کردم گفت SQL Server Business Intelligence Development Studio رو اجرا کنم ولی با اجرای این برنامه فقط خود V.S باز می شه و هیچ کار دیگه ای نمی شه کرد
ورژن SQL من
کد:
   Compone     m Sql 2000      Sql ...           Windows Task Manager      Versions      App  _Code
    Microsoft SQL Server Management Studio                                  9.00 .1399  .00

    Microsoft Analysis Services Client Tools                                2005  .090 .139  ...

    Microsoft Data Access Components           (MDAC   )                    2000  .085 .111  ...
    Microsoft MSXML                                                         2.6 3 .0 4 .0 5.0 ...

    Microsoft Internet Explorer                                             6.0 .2900  .2180

    Microsoft   .NET Framework                                              2.0 .50727  .42
    Operating System                                                        5.1 .2600


  To copy component name and version information            ,click                 Copy Info
  Copy Info   .
   Warning   :This computer program is protected by copyright law and 
   international treati     .Unauthorized reproduction or distribution of this 
   program   ,or any portion of      , may result in severe civil and criminal penalties      , 
   and will be prosecuted to the maximum extent possible under the law               .

  ©  2005 Microsoft Corporation    . All rights reserved .
 
آخرین ویرایش:

mazoolagh

Active Member
فكر نكنم نيازي باشه كه تغييري در كدهاتون بدين چون 2005 بطور منطقي بايد تمام ديتابيسهاي 2000 رو پشتيباني كنه.

در مورد query analyzer هم كه در management studio‌ گنجانده شده
 

arashkey

Member
یعنی با استفاده از همین کلاسی که دارم می تونم به 2005 وصل شم
در ضمن این 2005 چرا برام سرور ران نمی کنه . من دوتا ویندوز داشتم . یکی هیچی روش نصب نکردم یکی دات نت و 2000 روش نصب بود. حالا که 2005 نصب کردم وصل می شه به اون 2000 و از اون طریق کاراش رو انجام می ده.
رو اون یکی ویندوز که 2005 رو ریختم اصلا ران نشد. یعنی هیچ سروری نساخت. سوال من اینه برای اینکه بتونم تو SQL 2005 دیتابیس بسازم یا تغییر بدم باید اول 2000 بریزم بعد 2005 و در نهایت از 2005 به 2000 وصل شم.
این به نظر منطقی نمی یاد . چرا 2005 خودش یه سرور نمی سازه.
یا ورژن SQL من مشکل داره یا اینکه یک چیزی رو از قلم انداختم.
در مورد کانکشن استرینگ 2005 هم لطفا توضیح دهید یا مثال بزنید.( عوض شده، نشده ، provider ش چیه ؟و ...)
 

mazoolagh

Active Member
احتياجي به نصب 2000 قبل از 2005 نيست

در مورد سيستمي كه ميگين 2005 نصب كردين و هيچ سروري نساخته يعني از management studio كه وارد ميشين اينطوري هست يا اينكه در استوديو سرور ديده ميشه ولي از اپليكيشن نميتونين اون رو ببينين

در مورد كانكشن استرينگ نگران نباشين - فرقي نميكنه
 

arashkey

Member
بازم سوال برام پیش اومد
اگه کانکشن استرینگ فرق نمی کنه پس از کجا می فهمه به 2000 وصل شه یا 2005
در مورد سرورم اصلا هیچی نمی سازه.
راستش تو 2000 وقتی می خواستم بفهمم که SQL درست نصب شده یا نه تو قسمت کنار ساعت علامت یک کیس با یک فلش به شکل پلی سبز رنگ ظاهر می شد که در این صورت سرور شما رانه و می تونید ازش استفاده کنید.
ولی این 2005 هیچی کنار ساعت نمی یاره
یعنی به نظر می یاد هیچ سروری ران نکرده. با سرور نیم (local) و همین طور
localhost
.
همه اینا امتحان کردم ولی جواب نداد. می گفت کانکت نمی شه. شما راه حلی برای این موضوع دارید
 
آخرین ویرایش:

mazoolagh

Active Member
من 2005 كامل رو ندارم - همون ورژن اكسپرس هست و فعلا" هم روي سيستم ندارم.
ولي يادم هست كه مشكلي نداشت و حتي em 2000 هم ميتونست در يك شبكه با چندين سرور پيداش كنه و كنسول 2005 هم 2000 رو پيدا ميكرد.

در مورد آيكون سرويس منيجر هم يادم هست 2005 اكسپرس هم نداشت.

فرصت بدين يك 2005 نصب كنم !
 

arashkey

Member
اگه کار دارید باشه مسائله ای نیست
نباید همه چیز رو که جوابگو باشید
من هم معضزت می خوام اگه وقتتون رو زیاد گرفتم
فقط می خوام بدونم آلان این سایتی که با 2000 نوشتم رو می تونه یک سرور که روش 2005 دراه اجرا کنه یا نه
آیا ارور خاصی می ده
 

m1pfard

Member
خوب یه بار امتحان کنید ببینید چطور میشه!
اگه ارور داد که هیچ. اگه ارور نداد بازم هیچ!!
 

mazoolagh

Active Member
اگه کار دارید باشه مسائله ای نیست
نباید همه چیز رو که جوابگو باشید
من هم معضزت می خوام اگه وقتتون رو زیاد گرفتم
فقط می خوام بدونم آلان این سایتی که با 2000 نوشتم رو می تونه یک سرور که روش 2005 دراه اجرا کنه یا نه
آیا ارور خاصی می ده

موضوع جوابگويي نيست - فقط براي خودم هم سئوال شده

براي اينكه مطمئن بشين سرور اجرا شده يا نه يك سر به بخش services بزنين
اگر سرويس sql اجرا شده بود براي اينكه اسم سرور(ها) رو بدست بيارين دستور osql -L رو بزنين (در محيط كامند پرامپت)
براي پيدا كردن محل osql.exe‌ هم كافيه دستور dir osql.exe /s رو اجرا كنين.
 

arashkey

Member
موضوع جوابگويي نيست - فقط براي خودم هم سئوال شده

براي اينكه مطمئن بشين سرور اجرا شده يا نه يك سر به بخش services بزنين
اگر سرويس sql اجرا شده بود براي اينكه اسم سرور(ها) رو بدست بيارين دستور osql -L رو بزنين (در محيط كامند پرامپت)
براي پيدا كردن محل osql.exe‌ هم كافيه دستور dir osql.exe /s رو اجرا كنين.

البته من با osql کار کردم ولی نمی دونم الان منظورتون این هست من این دستور رو رو کامپیوتر خودم بزنم یا سرورو
سرور که مال من نیست . پس می مونه گزینه اول
ولی من مشکلم این نیست که تو کامپیوتر خودم اجرا می شه ( چون 2000 رو سیستمم نصبه پس وقتی قرار به بانک وصل شم به 2000 وصل می شه نه 2005)
حالا ترس من از این هستش چون سایت مال من نیست (ولی نویسندش من بودم ) وقتی مشتری ببره و اجرا کنه می ترسم ارور بده. به دلایلی هم نمی تونم خودم این موضوع رو کنترل کنم برای همینکه به شما گفتم . چون مشتریم سرورش 2005 هستش ولی اینو از اول نگفته بود
 

m_ziba

Member
دوست من مشکلی پیش نمی یاد.
در SQL Server 2005 فایل های SQL 2000 رو هم می شه Attach کرد.

اما اگه روی server منتقل شده و کار نکرده لطفاً error رو بگین.
 

جدیدترین ارسال ها

بالا