# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  attach کردن بانک به برنامه

## bahar2008

سلام به همه دوستان خوبم 
من فایل exe برنامم رو ساختم و برای اینکه بانکها رو atach کنم اول sql server رو نصب می کنم و بعد بانکهام رو بهش atach می کنم ولی در این حالت کاربر اگر این راه رو برای attach کردن برود می تواند به بانک ها دسترسی داشته باشه و می تونه بانکها رو تغییر یا ویرایش کنه  :ناراحت:  :ناراحت:  :ناراحت:  :ناراحت: 
می خواستم بدونم آیا کدی وجود داره که در برنامه قرار بدم تا خود برنامه بانکها رو attach کنه و این کد رو در کجای برنامه باید قرار بدم ؟( در ماژول باید بنویسم یا در لود فرم برنامه؟) 

سوال دیگه ای هم که داشتم اینه که در کد برنامه حتما باید مسیر بانکها رو بهش بدم یا بدون مسیر هم می شود بانکها رو attach کرد؟(آخه هر دفعه که کاربر برنامه رو از روی cd کپی می کنه که مسیر بانکها عوض می شه  :ناراحت:  ) 
ممنون می شم از دوستان گلم که کمکم کنند تا بتونم با استفاده از کد نویسی بانکهای برنامم رو attach کنم  :قلب:  :قلب:  :قلب:  :قلب:

----------


## __H2__

سلام
برای attach کردن اجرای تک دستور ساده زیر کافیست.

EXEC sp_attach_db
@dbname = N'DatabaseName', 
@filename1 = N'mdf-Filepath', 
@filename2 = N'ldf-FilePath' ;

که میتوانید آن را یکبار، در زمان setup یا اولین اجرای برنامه در خود VB عملی کنید.
و میتوانید فقط به نصب هسته اصلی اجرایی SQL بسنده کنید، تا دیگر کسی نتواند دستکاری خارج از برنامه انجام دهد.

اگر هم برنامه تان میخواهید قابل حمل و اصطلاحاً پرتابل باشد، بهتر است از نسخه sqlexpress استفاده کنید، این نسخه کوچک و جمع و جور توانایی کار با دیتابیس بدون attach متعارف را دارد.

----------


## bahar2008

يعني اگر من موقع نصب برنامه sql server مربوط به خود visual studio رو جزو برنامه هاي نصبي قرار بدم و اين كد رو در برنامم بنوبيسم بانكها به راحتي attach مي شن؟

آخه مي خوام نرم افزاري باشه كه كاربر كار اضافي به جز نصب برنامه انجام نده

----------


## ali_md110

به نظر من یک کپی از فایل mdf و فایل ldf بانک اسکیول رو  به پوشه bin واقع در مسیر برنامتون در کامپیوتر  خودتون بگیرید و کانکشن استرینگ برنامتون رو بر اساس کد زیر توی کل برنامون بکار ببرید 
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True
و این دوفایل رو در پکیج برنامه نصب قرار دهید 
 اگر از اسکیول اکسپرس استفاده کنید مناسبتر است
میتونید از این مسیر هم استفاده کنید و بانک رو توی مسیر زیر کپی کنید: \bin\Debug
Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\bin\Debug\Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True

----------


## __H2__

سلام



> يعني اگر من موقع نصب برنامه sql server مربوط به خود visual studio رو جزو برنامه هاي نصبي قرار بدم و اين كد رو در برنامم بنوبيسم بانكها به راحتي attach مي شن؟
> 
> آخه مي خوام نرم افزاري باشه كه كاربر كار اضافي به جز نصب برنامه انجام نده


شما میتوانید هر نسخه ای را خواستید نصب کنید، و express هم مشکلی ندارد.

برای اجرای دستوری که من گفتم و attach شدن دیتابیس هم کافیست بعد زا اتمام نصب و کپی فایلهای اصلی mdf و ldf یک نمونه SqlConnection بسازید (بدون نام دیتابیس) و بعد هم SqlCommand و در آخر دستور SQL فوق را هر کجا دوست داشتید اجرا کنید.


البته روش کاربر ali_md110 هم با حصول شرایط بد نیست.
این روش فقط روی نسخه express جواب میدهد و نسخه های دیگر SQLServer آن را ساپورت نمیکنند.
اگر برنامه تان تک نمونه ای و غیر شبکه ای ( و زیر 2G دیتا دارد !!!!!؟) استفاده از ConnectionStriing ای که کاربر ali_md110 گفتند شاید کارتان را راه بیاندازد.

این شیوه دیتابیس SQLServer را مثل یک دیتابیس Jet یا همان Access در دسترس قرار میدهد.
در کل معیار اصلی اجرای این روش، عدم نیاز به کار کرد شبکه ای است.

موفق باشید.

----------


## pouyalatif

سلام
اگه میخوان زمان نصب بانک رو به Sql اضافه کنی .میتونی از نرم افزار Setup سازی مثل InstallShield استفاده کنی. این نرم افزار این قدرت رو به تو میده که بانکتو تبدیل به اسکریپت کنی. بعد در هنگام نصب نرم افزار ازت میخواد تا فقط با بانک اطلاعاتی ارتباط برقرار کنی. تمام مراحل ساخت و افزودن بانک اطلاعاتی را به Sql خودش به صورت اتوماتیک انجام میده.

----------


## bahar2008

من کدی که گفتید که به هر 2 صورت در برنامم قرار دادم ولی هیچ کدومش جواب نداد  :ناراحت:   :ناراحت:  
آیا باید تغییرات دیگه ای هم بدم تا کار کنه یا اینکه محل گذاشتنش اشتباهه؟  :ناراحت:  
من کد attach رو در جایی قرار دادم که قرار هست در برنامه فقط 1 بار اجرا بشه و به صورت زیر نوشتمش 

 Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
        If TextBox1.TextLength = 0 Or TextBox2.TextLength = 0 Or TextBox3.TextLength = 0 Or TextBox4.TextLength = 0 Or TextBox5.TextLength = 0 Then
            MessageBox.Show("لطفا اطلاعات را كامل وارد کنید ")
        ElseIf TextBox4.Text <> TextBox5.Text Then
            MessageBox.Show("تكرار رمز عبور اشتباه است ")
        Else
            Dim cn As New SqlClient.SqlConnection
            cn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=I:\\project_d  ata;Integrated Security=True;User Instance=True"
            Dim cmd As New SqlClient.SqlCommand
            cn.Open()
            cmd.Connection = cn
            cmd.CommandType = Data.CommandType.Text


و یکی هم به این صورت نوشتم 

Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
        If TextBox1.TextLength = 0 Or TextBox2.TextLength = 0 Or TextBox3.TextLength = 0 Or TextBox4.TextLength = 0 Or TextBox5.TextLength = 0 Then
            MessageBox.Show("لطفا اطلاعات را كامل وارد کنید ")
        ElseIf TextBox4.Text <> TextBox5.Text Then
            MessageBox.Show("تكرار رمز عبور اشتباه است ")
        Else
            Dim cn As New SqlClient.SqlConnection
            cn.ConnectionString = "Data Source=(local);Initial Catalog=project;Integrated Security=True"
            Dim cmd As New SqlClient.SqlCommand
            cn.Open()
            cmd.Connection = cn
            cmd.CommandType = Data.CommandType.Text
           cmd.CommandText = "EXEC sp_attach_db @dbname,@filename1,@filename2"
           cmd.Parameters.Add("@dbname", SqlDbType.VarChar, 260).Value = "project"
          cmd.Parameters.Add("@filename1", SqlDbType.VarChar, 260).Value = "I:\\project_data.mdf"
            cmd.Parameters.Add("@filename2", SqlDbType.VarChar, 260).Value = "I:\\project_log.mdf"
            cmd.ExecuteNonQuery()
            cmd.CommandText = " INSERT INTO [user](id,name,vahed,pass1,pass2)VALUES(@TextBox1,@TextB  ox2,@TextBox3,@TextBox4,@TextBox5)"
            cmd.Parameters.AddWithValue("textbox1", Me.TextBox1.Text)
            cmd.Parameters.AddWithValue("textbox2", Me.TextBox2.Text)
            cmd.Parameters.AddWithValue("textbox3", Me.TextBox3.Text)
            cmd.Parameters.AddWithValue("textbox4", Me.TextBox4.Text)
            cmd.Parameters.AddWithValue("textbox5", Me.TextBox5.Text)
            cmd.ExecuteNonQuery()
            MessageBox.Show("اطلاعات با موفقیت به ثبت رسید ")
            cn.Close()

ولی هیچ کدوم از این حالت ها درست اجرا نشد و موقع اجرای برنامه خطا می داد که نمی تونم به بانک project وصل بشم  :ناراحت:

----------


## morteza_261

سلام
منم خیلی با کدها بازی کردم
اما به هیچ طریقی نتونستم استفاده کنم
اگه امکان داره یه سورس بزارید

----------


## bahar2008

فکر می کنم نرم افزار install shiel این همه دردسر نداشته باشه چون تعریفش رو توی همین انجمن زیاد شنیدم  :متفکر: 
کسی لینک دانلودش رو داره؟؟؟

----------


## ali_md110

یه مثال پروژه نصب حتما بدرتت میخوره 
باید ابتدا بانک  برنامت رو بصورت اسکریپت اسکیول تبدیل کنی و بزاری تو برنامت وقتی شروع به نصب بکنی بانک و جداول رو برات نصب میکنه

----------


## bahar2008

ممنونم از لطفت دوست عزیز  :قلب:  :قلب:  :قلب:  
این راه رو هم امتحان می کنم ببینم جوابی می ده یا نه  :اشتباه:

----------


## __H2__

سلام
از دوستان بابت عدم سر زدن به سایت و پاسخ به موقع عضر خواهی میکنم.
متاسفانه معمولاً باید به علت تاخیر در سر زدن و جواب شرمنده دوستان بشوم!

ولی خوشبختانه دستم پر است.
من یک نمونه برای سایت دیگری حاضر کرده بودم، دوستان میتوانند دانلود کنند و ببینند.
نمونه بانک را attach و detach میکنید و میتواند یک Login بسازد و یا Login را حذف کند.

در پروژه نمونه یک dll هم وجود دارد، که اصلاً مهم نیست و فقط از یک کنترلرش برای اماکن ویرایش ConnectionString در runtime توسط کاربر استفاده شده و مطلقاً ربطی به ذات کد ندارد.

البته برای کار کردن قسمت Login باید اعتبار سنجی sqlserver را روی sqlserver and windows ست کنید.

ولی بخش attach در هر شرایط باید کار کند.




> متن دستورات SQL را به صورت مجتمع در زیر میتوانید ببینید:
> Project->ProjectName Properties->Resources
> (ارتفاع سطرها را با ماوس بزرگ کنید، تا دستورات واضح تر دیده شوند.)
> 
> دیتابیس نمونه را در ریشه درایو D کپی کنید و اول دکمه Attach و بعد هم CreateLogin و در آخر TestConnectionWithLogin را کلیک کنید.
> 
> www.h02.ir/Download.aspx?File=Temp\SqlDatabaseInstall.zip


سعی میکنم حتماً در دو سه روز آینده، مدام سر بزنم تا سوالات احتمالی را جواب دهم.
مجدداً عضر خواهی میکنم و موفق باشید.

----------


## bahar2008

h2 عزيز ممنون از نمونه پروژه اي كه گذاشتي ولي نيم دونم چرا هر چي مسير ديتا بيس ها رو ردست بهش مي دم و نام ديتا سرور رو هم درست ميدم و دكمه attach رو مي زنم پيغام خطا مي ده كه ديتا بيس ها رو پيدا نكرده  :ناراحت:  
چند بار در جاهاي مختلف ديتابيس ها رو كپي كردم و آدرس درست رو بهش دادم ولي باز هم پيغام خطا مي ده كه فايل mdf رو پيدا نكرده  :ناراحت:

----------


## bahar2008

مشكل ديگه هم كه داره اين هست كه فايل sln برنامه وجود نداره و وقتي هم مي خوام با open project برنامه رو باز كنم پيغام خطا مي ده و باز نمي كنه  :ناراحت:  و مجبورم كدها رو با استفاده از note pad ببينم  :اشتباه:

----------


## bahar2008

ali_md110 عزيز من برنامه شما رو هم اجرا كردم ولي موقعي كه مي خوام اجراش كنم پيغام خطا مي ده ....البته يك فايل install هم وجود داشت در پروژه شما كه توي visual studio باز مي شد و موقعي كه اجرا مي زدم پيغام خطا مي داد  :ناراحت:

----------


## ali_md110

شما برنامه رو باز کنید و پروژه نصب موجود در اون رو حذف کنید و سپس یک پروژه جدید نصب از طریق FILEو سپس ADD و NEW PROJECT , و OTHER project و  setup And deployment اضافه کنید به پروژه 
در قسمت Application Folder  پروژه نصب کلیک راست کرده ADD رو بزنید PROJECT OUTPUT  رو انتخاب و گزینه PRIMARY OUT PUT   رو انتخاب و به پروژه اضافه کنید حالا از طریق منوی BUILD  گزینه BUILD SOLUTION  یا گزینه BUIELD SETUP1  رو یزنید SETUP1 نام پروژه نصب هستش پس از کامپایل با کلیک راست بر رو ی پروژه نصب و انتخاب INSTALL  یک بانک با جداول به نام ASPState ساخته میشه 
اگر دقت کنید دو فایل TXT  به نام inatall.txt و uistall.txt در پروژه وجود داره اینها همون اسکریپتها هستند
شما پس از ساخت اسکریپت بانکتون در mangmet یا sql query Aalizer  اونها
 رو بنام همین دو فایل install  , unistall  یکی برای نصب یکی برای جذف میسازید و جایگزین میکنید اگر بر روی فایل ScriptInstall.vb در پروژه کلیک راست و کد ها رو ببینید خودتون متوجه میشید 
من استفاده کردم خیلی خوب جواب داده 
اگر باز هم مشکلی هست پیا م بده
در ضمن شما اگر پروژه رو run کنید این خطا رو میده
A project with an Output Type of Class Library cannot be started directly.
In order to debug this project, add an executable project to this solution which references the library project. Set the executable project as the 
A project with an Output Type of Class Library cannot be started directly.
In order to debug this project, add an executable project to this solution which references the library project. Set the executable project as the 


 این یک کلاس نصب هستش که واسط اجرایی مثل یک فرم نداره یعنی باید ابتدا یک پروژه نصب به اون اضافه کنید و کامپایل کنید و اون فایل ست اپ رو اجرا کنید فایل ست اپ رو هم توی پوشه setup1 یا هر اسم دیگه ای براش گزاشتی  در پوشه Debug یا Relase قرار میگیره 
میتونی همونطور که گفتم  جهت تست بر روی پروژه  نصب در سولوشن کلیک راست کنی و install  رو بزنی 
علت خطا در اجرا اینه

----------


## __H2__

سلام



> h2 عزيز ممنون از نمونه پروژه اي كه گذاشتي ولي نيم دونم چرا هر چي مسير ديتا بيس ها رو ردست بهش مي دم و نام ديتا سرور رو هم درست ميدم و دكمه attach رو مي زنم پيغام خطا مي ده كه ديتا بيس ها رو پيدا نكرده


1- مطمئن شوید مسیر  انتخابی مشکل مجوز دسترسی ویدوز را ندارد.
مثل Desktop و MyDocument و... که زیاد جالب نیستند.
پیشنهاد میکنم در root یک درایو مثل D تست کنید، ببینید جواب میدهد؟

2- از نسخه sqlserver2005 استفاده میکنید؟

3- مطمئن شوید هیچ Connection ای از هیچ جا از این فایلهای دیتابیس استفاده نمیکنند. همه برنامه ها را ببندید و تستی کنید.

4- از دیتابیس نمونه داخل خود برنامه استفاده کرده اید؟




> .. فايل sln برنامه وجود نداره ..


نیست چون فایل vbproj وجود دارد. با vbproj کد را در vs باز کنید.

----------


## morteza_261

سلام
این برنامه برای sql2005 ؟؟؟

----------


## __H2__

سلام



> این برنامه برای sql2005 ؟؟؟


اگر منظورتان برنامه ای بوده که من گذاشتم، باید بگویم من دستورات SQL را بر اساس مستندات نسخه 2005 تهیه کرده ام و احتمال دارد در 2000 جواب ندهد.

----------


## bahar2008

من تمام conection string ها رو در كل برنامم (حتي در app.config ) به اين صورت تغيير دادم و sql exprees رو همراه برنامه exe خودم گذاشتم  ولي وقتي فايل exe رو در كامپيوتر ديگري اجرا مي كنم باز هم پيغام خطا مي ده كه بانك رو نمي شناسه  :اشتباه:   :ناراحت:  
اين كد مربوط به app هست 

 
<add name="project.My.MySettings.projectConnectionStrin  g" connectionString="Data Source=.\SQLExpress;AttachDbFilename=|DataDirector  y|project_Data.MDF;Integrated Security=True;User Instance=True"
      providerName="System.Data.SqlClient" />
 


اين كد مربوط به داخل خود برنامه هست كه در همه جاي برنامه به صورت زير به كار رفته 

cn.ConnectionString = "Data Source=.\SQLExpress;AttachDbFilename=|DataDirector  y|project_Data.MDF;Integrated Security=True;User Instance=True"

 



آيا كار ديگه اي هم لازمه كه انجام بدم؟ :ناراحت:

----------


## __H2__

سلام
شما دارید از مکانیزم غیر attach نسخه express استفاده میکنید.
این باید همیشه و بدون attach جواب دهد.
- حتماً باید در مقصد نسخه SQLServer Express را *نصب* کنید.
- باید نسخه sqlserver در ram در حال اجرا باشد و به بیان دیگر با رایانه بالابیاید.

Start->ProgramFile->Microsoft SQL Server 2005->Configuration Tools->SQL Server Configuration Manager->SQL Server 2005 Services-> SQL Server (SQLEXPRESS)->RightClick->Property
{
   ->Log On tab->Start
   ->Service tab->Start Mode->Automatic
}


- دیتابیستان در محل فایلها باشد.

اگر مشکلتان حل شد و نتوانستید یک نمونه بگذارید تا از نزدیک تستش کنم.

----------


## bahar2008

ممنونم از راهنماييتون دوست عزيز  :قلب: 
تمام نكاتي كه گفتيد رو چك كردم و درست مثل اوني بود كه شما گفتيد ولي بازم موقعي كه برنامه رو نصب مي كنم نمي تونه بانكها رو بشناسه و پيغام خطاي زير رو مي ده  :ناراحت:

----------


## sekhavat

در یک برنامه دات نت ، اولین بار که به بانک اطلاعاتی (Sql Server 2005) وصل می شویم ، حدود 10 تا 15 ثانیه برای اینکار زمان صرف می شود ، اما از بار دوم به بعد در مینیمم ثانیه این اتفاق می افتد ! در برنامه هایی شاهد بوده ام که با پیام "در حال اتصال به بانک اطلاعاتی" و سپس نمایش یک میله پیشرفت این مشکل را حل می کنند که بنظر من راه حل مطلوبی نیست. ولی در بعضی برنامه هم این مشکل حل شده است و از همان بار اول تاخيري وجود ندارد !!! اگر از این مسئله هم اطلاع دارید ممنون می شوم.   
اين هم كد مورد استفاده من :
Public Connection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\DataBase.mdf;Integrated Security=True;User Instance=True")
Connection.Open()
cmdBackup.ExecuteNonQuery()
Connection.Close()

----------


## __H2__

سلام



> تمام نكاتي كه گفتيد رو چك كردم و درست مثل اوني بود كه شما گفتيد ولي بازم موقعي كه برنامه رو نصب مي كنم نمي تونه بانكها رو بشناسه و پيغام خطاي زير رو مي ده


- ویندوزتان چیست؟

- آیا نرم افزار SQL Server Management Studio را دارید و یک تستی کنید ببینید چه دیتابیس هایی Attach شده اند.
http://www.microsoft.com/downloads/d...displaylang=en

البته جور دیگری هم میشود فهمید، هم با کد و هم با یک Connection جدید که در کامبو دیتابیس، دیتابیس های attach شده نشان داده خواهند شد.
چون خطای شما یک حدسی را هم روی تداخل نام با دیتابیس های موجود مطرح کرده.

- در آخر اگر میتوایند روی MyDocument تست نکنید.
برنامه را حداقل برای امتحان هم که شده در یک درایو مستقل و آزاد تست کنید، مثلاً ریشه یک درایو غیر C
بعد اگر انشا ا... کار کردف مذاکره میکنیم!!!!

من هم باز یک برسی میکنم و جواب میدهم.





> در یک برنامه دات نت ، اولین بار که به بانک اطلاعاتی (Sql Server 2005) وصل می شویم ، حدود 10 تا 15 ثانیه برای اینکار زمان صرف می شود ، اما از بار دوم به بعد در مینیمم ثانیه این اتفاق می افتد ! در برنامه هایی شاهد بوده ام که با پیام "در حال اتصال به بانک اطلاعاتی" و سپس نمایش یک میله پیشرفت این مشکل را حل می کنند که بنظر من راه حل مطلوبی نیست. ولی در بعضی برنامه هم این مشکل حل شده است و از همان بار اول تاخيري وجود ندارد


بدیهی است، بدون شک.
مکانیزم ADO.Net یک مخزن برای کش Connection ها دارد.
یعنی وقتی شما به ظار یک Connection را باز و بسته میکنید، در واقعاینطور نیست و در بانکی مثل SQLServer اوضاع فرق میکند.
ADO.Net Connection را که میبندید، نمی بندد.!
و در اصل دستور Close شما موجب ازاد شدن Connection و برگشتن ان به مخزن Connection های ADO.Net برای استفاده در دیگر ریسمان ها و نقاط میشود و در SQLServer همچنان Connection به برنامه شما باز می ماند.

و وقتی شما در خواست یک New Connection میدهدف اول مخزن داخلی ADO.Net چک میشود و اگر Connection آماده و بی کاری باشد، برای این کار به شما داده میشود که این کار طبیعتاً خیلی سریع انجام میشود.
ولی اگر Connection در مخزن نباشد (چه در شروع برنامه و چه اینکه در جاهای دیگر این Connection ها هنوز در حال استفاده باشند و Close نشده باشد.) ADO.Net یک ارتباط جدید را شروع میکند که هم از طرف ADO.Net و هم از طرف SQLServer برای ارتباط و پیدا کردن بانک و امنیت و... مسئله زمان بر میشود.

راه حل هم ساده است.
برنامه شما وقتی بالا می آید و احتمالاً یک صفحه SplashScreen را نمایش میدهد.
شما میتوانید یک Connection جدید بسازید و ببندید!
این کار دو مزیت دارد.
این کار دو مزیت دارد.
-----
1) عملاً در شروع برنامه رشته مهم ConnectionString تست میشود و اگر نتوانید به بانک وصل شوید و خطایی پیش اید میتوانید هشدار لازم را در همان شروع کار به کاربر بدهید و از ادامه کار برنامه و خطاهای بعدی که پیش می ایند جلوگیری کنید و محترمانه و پیغام مناسب برنامه را ببندید.

2) یک Connection آماده استفاده و آزاد به مخزن ADO.Net اضافه میکنید، تا در اجرای برنامه در خواست New Connection تان سریعتر اجرا شود.

----------


## bahar2008

ممنونم از راهنماییتون دوست عزیز  :قلب:  :قلب:  :قلب: 
واقعا یک دنیا ممنونم که این بحث رو دنبال می کنید و جواب سوالات من رو می دهید  :قلب:  :قلب: 
ویندوزم xp هست 
البته من هیمشه در دسکتاپ امتحان می کردم و این راهی که شما گفتید رو هم امتحان می کنم حتما  :قلب: 

مشکل دیگه ای که جدیدا بهش برخوردم این هست که من همون پروژه رو در کامپیوتر خودم کپی کردم و اجرا کردم و موقع اجرا پیغام error زیر رو داد 
Error 1 Unable to find manifest signing certificate in the certificate store. project

و البته با همین پیغام هم اجرا شد و درست کار می کرد ولی موقعی که می خواستم exe پروژه رو بسازم باز هم همین پیغام با چند پیغام خطای دیگه رو صادر کرد و exe رو نساخت  :ناراحت: 

دلیل این پیغام خطا چی هست؟ آیا تا بحال شما به این پیغام برخوردید؟ :ناراحت:

----------


## __H2__

سلام



> البته با همین پیغام هم اجرا شد و درست کار می کرد ولی موقعی که می خواستم exe پروژه رو بسازم باز هم همین پیغام با چند پیغام خطای دیگه رو صادر کرد و exe رو نساخت 
> 
> دلیل این پیغام خطا چی هست


کلاً پروژه ای که کامپایل نمیشود، حتماً ایراد تابلویی دارد!!!
مثل ایرادهای اشتباه هات نوشتاری در سینتکس یا فقدان یک dll که Reference شده.
یا ...

شما میتوانید شرح بیشتر ایراد و محل ایراد را با دبل کیک در پنجره View->Error List ببینید.

با توجه به متن خطایتان به نظر میرسد در یکی از strong name ها دچار مشکل هستید.
اگر از فایلها مربوطه استفاده میکنید، انها را چک کنید که هم وجود داشته باشند و هم منقضی نشده باشند و هم ...

----------


## bahar2008

ممنونم از راهنماييتون دوست عزيز 
مشكل اينجاست كه هر چي هم 2 بار كليك مي كنم روي خطاي گرفته شده به جايي هدايت نمي كنه و خطي كه مشكل داره رو نشون نمي ده  :ناراحت:  
من تمام فايلهارو كامل كژي مي كنم ولي باز هم مشكل داره 
من يك پروژه كوچيك به همون روشي كه از sqlexpress2005 استفاده شده در تمام برنامه به عنوان نمونه در كامپيوتري كه فقط sql express2005 نصب بود روش نوشتم و ديدم كه در خط cn.open خطا مي ده و مي گه كه نمي تونه sql2005 رو باز كنه  :ناراحت:  
با اينكه visual studio 2005 نصب كردم ولي نمي دونم چرا با sql 2005 مشكل داره  :ناراحت:

----------


## __H2__

سلام
من اول یک چیز را خودم متوجه بشم!
یعنی ما الآن با دو خطای متفاوت طرف هستم، درسته؟
1-یکی اینکه یک Exe شما در رایانه دیگر نمیتواند به دیتابیس وصل شود.
2-یک پروزه دیگر هم کامپایل نمیشود و اصلاً exe نمی سازد

اگر اینطور است
-----
در مورد مشکل اول و اگر همچنان همان متن خطای پست 22 را که تصویر هم داشت، دریافت میکنید.
شما لغت |DataDirectory| را از رشته اتصال حذف کنید و به جایش یک مسیر ثابت را قرار دهید، مثلاً D:\files.mdb (فعلاً) پروزه را کامپایل کرده و با exe جدید در رایانه مقصد تست کنید(فراموش نکنید که دیتابیس را به همان محل ثابت کپی کنید.)
اگر دیگر خطا نداد، راه حل نهایی را خدمتتان عرض میکنم.
-----
در مورد خطای دوم
این یک خطای مجوز است،
فایل snk یا pfx یا cer در پروژه دارید؟
سری هم به Project->Propertoes->Singing بزنید.
آیا از فایل dll خاصی استفاده کرده اید؟

----------


## bahar2008

ممنونم از راهنمايي مفيدتون دوست عزيز  :قلب:   :قلب: 
ولي بازم پيغام خطا مي ده ولي اين دفعه از دستور AttachDbFilename خطا مي گيره  :ناراحت:  
با اينكه يك نمونه پروژه ساده رو نوشتم كه امتحانش كنم ولي يك جاييش رو درست مي كنم يك جاي ديگش پيغام خطا مي ده و هنوز نتونستم فايلهام رو attach كنم به برنامه  :گریه:   :گریه: 

پيغام خطايش هم اينه 


در مورد مشكل دوم هم فايل هايي كه گفتيد رو ندارم  :ناراحت:

----------


## __H2__

سلام



> ولي بازم پيغام خطا مي ده ولي اين دفعه از دستور AttachDbFilename خطا مي گيره


یعنی مقداری که برایش وارد کردید، صحیح نیست، احتمالاً اشتباه تایپی دارید. دقت بیشتری کنید.

شما بیاید اصلاً بدون برنامه هم یک تست کنید
فایل زیر را دانلود کنید بعد در رایانه مقصد راست کلیک کنید و Property را انتخاب کنید.
به برگه Connection بروید و به جای project_Data نام فایل دیتابیس خود را قرار دهید و دکمه TestConnection را بزنید.

سعی کنید با تغییر تنظیمات بالاخره موفق به برقراری ارتباط شوید.
(من خودم همین الآن تست کردم و جواب هم گرفتم)

----------


## bahar2008

ممنونم از لطفتون دوست عزيز  :قلب:  :قلب: 
با چند بار پيغام خطا بالاخره الان جواب داد و successfull اعلام كرد  :قلب:  :قلب: 
خيلي برنامه راحت و عالي هست اگر من اين رو در كنار پروژه exe خودم بزارم آيا مشكل بريا هميشه حل مي شه؟

----------


## __H2__

سلام



> ...الان جواب داد و successfull اعلام كرد ..


خوبهف حله!
پس ایراد شما از ConnectionString تان بوده.




> .. در كنار پروژه exe خودم بزارم آيا مشكل بريا هميشه حل مي شه؟..


نه ولی راه حل این است:

- همین فایل را که بالاخره وصل شد را با Notapad باز کنید.
- از خط آخر بخش ";Provider=SQLOLEDB.1" را حذف کنید، 
- حال خط آخر را به جای ConnectionString در برنامه تان استفاده کنید.

- شاید هم بهتر باشه به جای |DataDirectory| خودتان مسیر جاری را با System.Windows.Forms.Application.StartupPath در اورید و ConnectionString را اصلاح کنید.
______________

البته پیشنهاد من برای برنامه های کامل تر این است که شما در پنجره Options برنامه تان، امکان ویرایش ConnectionString را به کاربرتان بدهید.
مثل این نمونه:
http://www.h02.ir/Download.aspx?File...tionString.zip

البته چون من این نمونه را برای کسی درست کردم که دیتابیس اش attach میشد و کار میکرد، بخش انتهایی گرفتن مسیر فایل برای نسخه Express را مخفی کردم تا کوچک تر و ساده تر باشد.
شما کافیست پروژه را در VS2008 باز کنید و ارتفاع فرم frmOptions2 را زیاد کنید و خصوصیت ShowAttachDatabase کنترلر SCS را True کنید.

با این نمونه کد میتوانید برگه Connection فوق را که مشکلتان را حل کرد، به صورت runtime به داخل برنامه تان اضافه کنید، تا در صورت بروز هر مشکل، بتوانید در محل نصب برنامه از طریق منوی Options (تنظیمات) خود برنامه مشکل را حل کنید و رشته مطلوب ConnectionString را ست کنید.

اینطوری حتی اگر دیتابیس attach هم شود، شما نباید کد خود را تغییر دهید، فقط کافیست تنظیم برنامه خودتان را عوض کنید.

(البته شاید خیلی ها ترجیح بدهند برای پروژه های کوچک اصلاً این پنجره و Option را نداشته باشند ولی من خودم همیشه ترجیح میدم باشه)

----------


## bahar2008

ممنونم از راهنمايي مفيدتون دوست عزيز ولي مثل اينكه اين مشكل من حل شدني نيست  :گریه: 
با اينكه تمام كارهايي كه شما گفتيد رو انجام دادم ولي باز پيغام خطاي زير رو مي ده


احتمالا اين پيغام بريا اين نيست كه من با sql2000 كار مي كنم و توي اين كامپيوتر مي خوام با sql expres  كار كنم؟ :ناراحت:

----------


## bahar2008

اين كد برنامم هست كه گفته بودم يك نمونه كوچيك رو امتحان مي كنم 

Public Class Form1
    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
        If TextBox1.TextLength = 0 Or TextBox2.TextLength = 0 Or TextBox3.TextLength = 0 Or TextBox4.TextLength = 0 Or TextBox5.TextLength = 0 Then
            MessageBox.Show("لطفا اطلاعات را كامل وارد کنید ")
        ElseIf TextBox4.Text <> TextBox5.Text Then
            MessageBox.Show("تكرار رمز عبور اشتباه است ")
        Else
            Dim cn As New SqlClient.SqlConnection
            cn.ConnectionString = "Data Source=Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Persist Security Info=False;Initial File Name=D:\project_Data.mdf"
            Dim cmd As New SqlClient.SqlCommand
            cn.Open()
            cmd.Connection = cn
            cmd.CommandType = Data.CommandType.Text
            cmd.CommandText = " INSERT INTO [user](id,name,vahed,pass1,pass2)VALUES(@TextBox1,@TextB  ox2,@TextBox3,@TextBox4,@TextBox5)"
            cmd.Parameters.AddWithValue("textbox1", Me.TextBox1.Text)
            cmd.Parameters.AddWithValue("textbox2", Me.TextBox2.Text)
            cmd.Parameters.AddWithValue("textbox3", Me.TextBox3.Text)
            cmd.Parameters.AddWithValue("textbox4", Me.TextBox4.Text)
            cmd.Parameters.AddWithValue("textbox5", Me.TextBox5.Text)
            cmd.ExecuteNonQuery()
            MessageBox.Show("اطلاعات با موفقیت به ثبت رسید ")
            cn.Close()
            Me.Hide()
        End If
    End Sub
End Class

----------


## __H2__

سلام



> با اينكه تمام كارهايي كه شما گفتيد رو انجام دادم ولي باز پيغام خطاي زير رو مي ده


یعنی از همان رشته اتصالی که در نمونه پست 30 به دست آورده بودید استفاده کردید؟؟؟



> با چند بار پيغام خطا بالاخره الان جواب داد و successfull اعلام كرد


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

*وقتی پیغام successfull را دریافت کردید، آیا فایل را با Apply-OK ذخیره کردید یا نه؟؟؟؟
چون همینطوری ذخیره نمیشود؟ و شاید شما اصلاً Apply-OK را نزده اید و چیزی که در Notepad دیدید همان نباشد که با آن وصل شدید؟
لطفاً با صبر و دقت بیشتری یک بار دیگر عمل کنید ، چون یک جورهایی امکان ندارد آن وصل شود و کد شما وصل نشود.
*


من حتی آنقدر به این فایلها اطمینان دارم که چندین سال پیش که یک برنامه برای فروشگاهی با چند صندوق کامپیوتری نوشتم، از همین فایلها برای دینامیک کردن ConnectionString استفاده کردم و برنامه موقع بالا آمدن به صورت ini و Text فایل را میخواند و بخش اضافه را حذف میکرد و به راحتی به سرور کانکت میشد.
و هر موقع هم که میخواستم میتوانستم ConnectionString را اصلاح کنم.

آیا فایل را با Notepad باز کرید، داخلش فقط این بود؟

Data Source=Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Persist Security Info=False;Initial File Name=D:\project_Data.mdf


ضمناً برای تست اتصال کد زیر کافی است.

Using cn As New SqlClient.SqlConnection("Data Source=Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Persist Security Info=False;Initial File Name=""D:\project_Data.mdf""")
     cn.Open
End Using


=====

من یک کار دیگر هم کردم همان پست 30 را یادتون است که بالاخره وصل شدید؟
من یک نمونه دات نتی شبیه همان با تغییرات روی سورسی که در همین تاپیک گذاشتم، تهیه کردم.
این exe رشته اتصال را از فایل SqlServerConnectionString.txt میخواند و در همان هم Save میکند.
یک بار دیگر همان کاری را که با پست 30 کردید با این هم انجام دهید، دکمه Advanced میتواند تمام معیارهای رشته اتصال را برای تغییر به شما عرضه کند.
حتماً اگر TextConnection را زدید و وصل شد، برای ذخیره تغییرات OK را فراموش نکنید.

(متوجه شدم یک ایراد کوچک در زمان خواندن از SqlServerConnectionString.txt و در فعال کردن دکمه رادیویی attach a database file داره که فعلاً مهم نیست و درستش میکنم)
http://www.h02.ir/Download.aspx?file...String.exe.zip

----------


## bahar2008

بله فكر مي كنم *Apply-OK* رو زدم  :متفکر: 
ممنونم از نمونه برنامه اي گذاشتيد دوست عزيز  :قلب: 
برنامه رو كه اجرا كردم پيغام خطاي زير رو داد  :ناراحت: 


يك سوال ديگه اي كه داشتم اين هست كه از كجا مي تونم بفهمم كه فايلهام attach شده در sql express2005 يا نه؟  :متفکر: 
سوال ديگه ام اين هست كه اگر attach شده باشه و من دستور attach رو دوباره بزنم آيا پيغام خطا مي ده يا روي همون قبلي attach مي كنه؟ :متفکر:

----------


## __H2__

سلام



> برنامه رو كه اجرا كردم پيغام خطاي زير رو داد


درسته خطا میده ولی مثل همان نمونه پست 30 تنظیمات این یکی را هم *سعی کنید در بخش Advanced دستکاری کنید، تغییر دهید تا بالاخره درست وصل شود.*




> يك سوال ديگه اي كه داشتم اين هست كه از كجا مي تونم بفهمم كه فايلهام attach شده در sql express2005 يا نه؟


در همین برنامه آخری یا آن نمونه پست 30 در بخش Select the database on the server یک combobox دارد که نام تمام دیتابیس های attach شده تحت servername را برمیگرداند.
*اگر بتوانید برنامه کامل SQL Server Management Studio را هم تهیه و نصب کنید میتوانید بسیار کمک کند.*
http://www.microsoft.com/downloads/d...displaylang=en





> سوال ديگه ام اين هست كه اگر attach شده باشه و من دستور attach رو دوباره بزنم آيا پيغام خطا مي ده يا روي همون قبلي attach مي كنه؟


شما اگر دو دیتابیس مختلف در دو مسیر مختلف با یک نام یکسان را بخواهید attach کنید به خطا میخورید چه رسد به مسیر ثابت و نام ثابت.

یک راه حل کاربردی که به ذهنم میرسد که میتواند این مشکل را خاتمه دهد، ولی چندان ساده و در عرف نیست.
اگر ip اینترنتی مجاز و مشخصی داشته باشید، شاید بتوان با RemoteDesktop مشکل را حل کرد.
چون این مشکل شما متعارفاً باید خیلی وقت پیش حل میشد، من خودم همیشه در حد چند دقیقه مشکلم را با sqlserver حل کرده بودم، ولی حتماً باید ک نکته ای از قلم افتاده باشد.

----------


## bahar2008

ممنونم از راهنماييتون دوست عزيز  :قلب: 
اين دفعه هر كاري مي كنم با اينكه تمام تنظيماتش رو هم درست كردم نمي تونم با اين برنامه كار كنم و مدام پيغام خطا ميده  :ناراحت: 
راه حل آخرتون خيلي سخته فكر نيم كنم بتونم انجامش بدم

----------


## bahar2008

تيكه برانمه كوچيكي كه براي امتحان استفاده مي كنم اين هست 

Imports System.Data
Imports System.Data.SqlClient
Imports System.DBNull
Imports System.Data.SqlClient.SqlConnection
Imports System.Data.Common.DbConnection
Imports System.Data.SqlClient.SqlCommand
Imports System.Data.SqlClient.SqlDataAdapter
Public Class Form1
    Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
        If TextBox1.TextLength = 0 Or TextBox2.TextLength = 0 Or TextBox3.TextLength = 0 Or TextBox4.TextLength = 0 Or TextBox5.TextLength = 0 Then
            MessageBox.Show("لطفا اطلاعات را كامل وارد کنید ")
        ElseIf TextBox4.Text <> TextBox5.Text Then
            MessageBox.Show("تكرار رمز عبور اشتباه است ")
        Else
            Dim cn As New SqlClient.SqlConnection
            cn.ConnectionString = "Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=e:\project_Data.MDF  ;Initial Catalog=project"
            Dim cmd As New SqlClient.SqlCommand
            cn.Open()
            cmd.Connection = cn
            cmd.ExecuteNonQuery()
            cmd.CommandType = Data.CommandType.Text
            cmd.CommandText = " INSERT INTO [user](id,name,vahed,pass1,pass2)VALUES(@TextBox1,@TextB  ox2,@TextBox3,@TextBox4,@TextBox5)"
            cmd.Parameters.AddWithValue("textbox1", Me.TextBox1.Text)
            cmd.Parameters.AddWithValue("textbox2", Me.TextBox2.Text)
            cmd.Parameters.AddWithValue("textbox3", Me.TextBox3.Text)
            cmd.Parameters.AddWithValue("textbox4", Me.TextBox4.Text)
            cmd.Parameters.AddWithValue("textbox5", Me.TextBox5.Text)
            cmd.ExecuteNonQuery()
            MessageBox.Show("اطلاعات با موفقیت به ثبت رسید ")
            cn.Close()
            Me.Hide()
        End If
    End Sub
End Class
 


ولي موقع اجرا اين پيغام خطا رو ميده  :ناراحت:  :ناراحت:

----------


## fat_roze2000

Try
            Dim strMDF As String = ""
            Dim strDB As String = ""

            If Not EMACoABFAResource.Common.clsUtility.CheckConnectio  n("data source=" + txtQABFAServerName.Text + ";persist security info=False;user id=" & txtQABFAUserName.Text + ";packet size=4096;password=" & txtQABFAPassword.Text + ";initial catalog=master") Then Return
            If sender Is Me.btnAttachCallerID Then
               strMDF = Me.txtCallerIDBank_MDF.Text
               strDB = Me.txtCallerIDBank.Text
            ElseIf sender Is Me.btnAttachIsfahanPoints Then
               strMDF = Me.txtPoints_MDB.Text
               strDB = Me.txtPoints.Text
            ElseIf sender Is Me.btnAttachQAbfa Then
               strMDF = Me.txtQABFA_MDF.Text
               strDB = Me.txtQABFADatabaseName.Text
            End If

            strMDF = strMDF.ToUpper
            Dim strLDF As String = strMDF.ToUpper.Replace("MDF", "LDF")
            Dim fiInfo As New IO.FileInfo(strMDF)

            If Not (IO.File.Exists(strMDF) And IO.File.Exists(strLDF)) Then
               clsMain.frmMessage.ShowMessage(EMACoComponents.Enu  ms.eMessage.eCustomMessage, "تمامی فایل های مربوط به بانک اطلاعاتی وجود ندارد", EMACoComponents.Enums.eMessageBoxButtons.eOk, EMACoComponents.Enums.eMessageBoxIcon.eStop)
               Return
            ElseIf fiInfo.Extension <> "MDF" Then
               clsMain.frmMessage.ShowMessage(EMACoComponents.Enu  ms.eMessage.eCustomMessage, "فایل های مورد نظر جهت بانک اطلاعاتی مناسب نمی باشد", EMACoComponents.Enums.eMessageBoxButtons.eOk, EMACoComponents.Enums.eMessageBoxIcon.eStop)
               Return
            Else
               Dim cnn1 As New SqlClient.SqlConnection("data source=" + txtQABFAServerName.Text + ";persist security info=False;user id=" & txtQABFAUserName.Text + ";packet size=4096;password=" & txtQABFAPassword.Text + ";initial catalog=master")
               Dim cmd1 As New SqlClient.SqlCommand("SELECT name FROM sysdatabases WHERE name = N'" + strDB + "'", cnn1)
               cmd1.CommandType = CommandType.Text
               cmd1.Connection.Open()

               Dim rdr As SqlClient.SqlDataReader = cmd1.ExecuteReader

               If rdr.HasRows Then
                  clsMain.frmMessage.ShowMessage(EMACoComponents.Enu  ms.eMessage.eCustomMessage, "چنین بانک اطلاعاتی وجود دارد. نام دیگری انتخاب کنید.", EMACoComponents.Enums.eMessageBoxButtons.eOk, EMACoComponents.Enums.eMessageBoxIcon.eStop)
                  Return
               Else
                  rdr.Close()
                  cmd1.CommandText = "SELECT name FROM sysdatabases WHERE filename = N'" + strMDF + "'"
                  cmd1.CommandType = CommandType.Text
                  rdr = cmd1.ExecuteReader

                  If rdr.HasRows Then
                     clsMain.frmMessage.ShowMessage(EMACoComponents.Enu  ms.eMessage.eCustomMessage, "چنین بانک اطلاعاتی با نام دیگری ضمیمه شده است.", EMACoComponents.Enums.eMessageBoxButtons.eOk, EMACoComponents.Enums.eMessageBoxIcon.eStop)
                     Return
                  End If

               End If

            End If

            Dim cnn As New SqlClient.SqlConnection("data source=" + txtQABFAServerName.Text + ";persist security info=False;user id=" & txtQABFAUserName.Text + ";packet size=4096;password=" & txtQABFAPassword.Text)
            Dim cmd As New SqlClient.SqlCommand("EXEC sp_attach_db @dbname = N'" + strDB + "', @filename1 = N'" + strMDF + "',@filename2 = N'" + strLDF + "';", cnn)
            cmd.CommandType = CommandType.Text
            cmd.Connection.Open()
            cmd.ExecuteNonQuery()
         Catch ex As Exception

         End Try

----------


## __H2__

سلام



> cn.ConnectionString = "Data Source=.\SQLEXPRESS;Integrated Security=True;AttachDbFilename=e:\project_Data.MDF  ;Initial Catalog=project"
> 
> ولي موقع اجرا اين پيغام خطا رو ميده


گرچه امیدهایم دارد ته میکشد ولی به نظر ConnectionString ای که در پست اخریتان (39) استفاده کردید، چندان صحیح نیست.
به جایش از همچین چیزی استفاده کنید:

Data Source=.\SQLEXPRESS;AttachDbFilename=E:\project_Da  ta.MDF;Integrated Security=True;User Instance=True

----------


## saman_itc

> *اگر بتوانید برنامه کامل SQL Server Management Studio را هم تهیه و نصب کنید میتوانید بسیار کمک کند.*
> http://www.microsoft.com/downloads/d...displaylang=en
>  .


 سلام استاد.مجانی!!!؟

----------


## bahar2008

ممنونم از لطفت h2 عزيز  :قلب:  من كدي كه شما دادي رو هم نوشتم ويل باز هم پيغام خطاي قبيل رو داد 
تصميم گرفتم كه با sql2000 كار كنم و با كد نويسي بانكهام رو بهش attach كنم 
فقط يك سوالي دارم كه بايد در تمام فرمهايي كهcn.conection string استفاده شده كد attach dbfilename رو هم بنويسم يا فقط در app . config و فرم اوليه ام لازم هست كه كد attach رو بنويسم؟

----------


## __H2__

سلام



> مجانی!!!؟


نسخه های Express مایکروسافت همواره مجانی و صددرصد هم کازآمد بوده اند.
البته لینک صریحی با نام Management2008 ندیده ام ولی به احتمال زیاد نسخه مجانی و 2008 هم باید در پک های تکمیلی نهایی SQLServerExpress2008 که لینکشان در تاپیک زیر موجود است، Management2008 داشته باشد.
https://barnamenevis.org/showth...420#post581420

حداقل قابلیت جالب این نسخه 2008 امکان کمک در تایپ دستورات T-SQL است، AutoList یا همان IntelliSense
که البته این ربطی به امکانات خود هسته SQLServer2008 ندارد.





> تصميم گرفتم كه با sql2000 كار كنم


چندان فکر جالب توجهی نیست! ولی خودتان میدانید.
من بودم کل سیستم را فرمت میکردم و یک SQLServer2008 توپ نصب میکردم
(که البته همین را انجام داده ام!!!!)





> كد attach dbfilename رو هم بنويسم يا فقط در app . config و فرم اوليه ام لازم هست كه كد attach رو بنويسم؟


طبیعاً هر کجا ConnectionString را قید کرده و نوشته اید باید اصلاح شود.
البته در یک برنامه نرمال و صحیح معمولاً باید ConnectionString در یک مکان مشخص باشد و حتی تغییر آن بعد از کامپایل هم ممکن باشد و نیازی به تغییری برنامه نباشد.

----------


## bahar2008

من sql2000 رو نصب كردم و conection string رو به صورت زير تغيير دادم ولي باز هم با پيغام خطا برخوردم  :ناراحت:  فكر مي كردم كه در اين مورد ديگه مشكلي نباشه  :گریه:  


 cn.ConnectionString = "Data Source=(local);AttachDbFilename=E:\project_Data.MD  F;Integrated Security=True"

 


اين هم پيغام خطا هست كه متوجه منظورش نشدم  :ناراحت:

----------


## __H2__

سلام
*شما باید بانک را attach کنید*
من یادم نمی آید تا حال در نسخه 2000 به صورت غیر attach کار کرده باشم و خیلی بعید هم میدانم این نسخه قابلیت کار با دیتابیس بدون attach را داشته باشد.
اگر میتوانید نرم افزاری را که در پست 37 گفتم تهیه یا دانلود کنید، شاید راحی باشد.
http://www.microsoft.com/downloads/d...displaylang=en

البته نمونه کدهایی که برای attach بود هم همین عمل را انجام میداد و اگر تمام نکات رعایت میشد باید کار میکرد.
و اگر همه کارها را به دقت انجام داده اید و attach انجام نشده بود و با این مشکلات اخیر که شما میفرمائئد همه اعمال را انجام میدهید و به نتیجه نمیرسید، من اینطور برداشت میکنم که شاید sqlserver و windows شما دچار مشکل شده باشند و با نصب مجدد ویندوز مشکل حل شود.
(گرچه من خودم تا حالا شاهد برخی اتفاقاتی که شما تشریح میکنید نبوده امف مثل وصل شدن udl پست 30 و عدم وصل شدن برنامه!!)

*بحرحال اگر نرم افزار فوق را توانستید دانلود و نصب کنید و یا ویندوزتان را عوض کنید، باز شاید بتوانم کمک کنم وگرنه دیگر از تئوری پردازی و پیشبینی دلایل و راه حل، تهی شده ام (!!!) و دیگر نمیتوانم کمکی به شما بکنم.*


میبخشید و انشا ا... پس از این همواره موفق باشید.

----------


## abi_sarab

سلام
کسی نسخه sqlexpress 2005  کم حجم که نرم افزار باش کار کنه داره؟ بذاره واسه دانلود.
مرسی

----------


## __H2__

سلام
بهتر بود سوال را در تاپیکی مجزا میپرسیدید...
بهرحال همانطور که ذکر شده لینک دانلود مشخص است.

SQL Server 2005 Express-SP2 36MB
http://www.microsoft.com/downloads/d...displaylang=en

SQL Server 2008 Express 61M
http://www.microsoft.com/downloads/d...displaylang=en
(که البته به مخلفات دیگری هم نیاز دارد که در همین لینک موجود است)

اگر هم VS را نصب کرده باشید و یا CD/DVD اش را داشته باشید، نیاز به دانلود ندارید و میتوانید فایل نصب نسخه express2005 را پیدا کنید.

----------

