كار با بانك اطلاعاتي در c++.net

sara_she

Member
با سلام

اگه مي شه بگيد تفاوت بين كامپوننت هاي odbcconnection,....)odbc , sql, oledb)و oracle با هم چيه . من مي خوام تو vs c++.net‌با بانك اطلاعاتي كار كنم البته از نرم افزار Sqlserver استفاده مي كنم ولي مي خوام بانكم صرفآ sql server كار نكنه
 

saalek110

Well-Known Member
به نقل از کتاب آقای هاشمیان. لینک دانلود در تاپیک یادگیری سی شارپ. صفحه دوم .

d1.gif

 

sara_she

Member
خسته نباشيد
ممنون از توجه تون
دو سوال برام پيش اومده . اول اينكه از oledb‌ مي شه براي كار با sqlserver‌و interbase‌ هم استفاده كرد ؟
دوم اينكه من با نوشتن يه دستور Sql‌پارامتريك تو c++.net مشكل دارم

اگه دستور من به صورت زير باشه:
کد:
				  oleDbConnection1->Open(); 
				  DataSet *dataSet11=new DataSet;
				  OleDbDataAdapter *oleDbDataAdapter1= new OleDbDataAdapter("select * from project where code=@textBox1->Text",oleDbConnection1);
								  oleDbDataAdapter1->Fill(dataSet11,"project");
                  dataGrid1->DataSource=dataSet11;
                  dataGrid1->DataMember="project";



در موقع اجرا خطاي زير رو مي گيره :
کد:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll

در صورتي كه اگه شرط رو ننويسم و يا يك مقدار مشخص به جاي textbox قرار بدم به درستي اجرا مي شه
 
آخرین ویرایش:

sara_she

Member
اگرم به جاي @ از + استفاده كنم خطاي زير رو مي ده:

(241): error C2110: '+' : cannot add two pointers
 

saalek110

Well-Known Member
راستش این دو روزه درگیر راه اندازی sql server بودم.
البته فکر کنم سئوال را با اکسس هم بشود جواب داد .
 
آخرین ویرایش:

saalek110

Well-Known Member
منبع:
http://www.java2s.com/Code/CSharp/Database-ADO.net/ConnectstoaMicrosoftAccessdatabase.htm

برای اتصال به یک فایل(دیتابیس) اکسس:
کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Connect_access
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String connect = "Provider=Microsoft.JET.OLEDB.4.0;data source=.\\ClassProjects.mdb";
            OleDbConnection con = new OleDbConnection(connect);
            con.Open();
            MessageBox.Show("Made the connection to the ClassProjects database");
            con.Close();
        }
    }
}
من دیتابیس را در پوشه دیباگ کنار فایل اجرایی قرار دادم.وقتی که برمی داشتم خطای زمان اجرا می داد.

= = == = == = = = = =
گام بعد : حالا کوئری هم می گیریم:
منبع: http://www.java2s.com/Code/CSharp/D...nnectionobjecttoconnecttoanAccessdatabase.htm


کد:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Connect_access
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String connect = "Provider=Microsoft.JET.OLEDB.4.0;data source=.\\ClassProjects.mdb";
            OleDbConnection con = new OleDbConnection(connect);

            OleDbCommand myOleDbCommand = con.CreateCommand();
            myOleDbCommand.CommandText =
      "SELECT * " +
      "FROM PROJECT " +
      "WHERE Code = 'INT202'";

            con.Open();
          
            OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
            myOleDbDataReader.Read();


            MessageBox.Show("myOleDbDataReader[\" Code\"] = " + myOleDbDataReader["Code"]);
            MessageBox.Show("myOleDbDataReader[\" Number\"] = " + myOleDbDataReader["Number"]);
            MessageBox.Show("myOleDbDataReader[\" Title\"] = " + myOleDbDataReader["Title"]);
            MessageBox.Show("myOleDbDataReader[\" Due\"] = " + myOleDbDataReader["Due"]);
            MessageBox.Show("myOleDbDataReader[\" Points\"] = " + myOleDbDataReader["Points"]);
            con.Close();
        }
    }
}
توجه کنید که کامند به دو چیز نگاه کرده یکی به کانکشن و یکی به متن کوئری.
و ریدر به کامند نگاه کرده.
توجه کنید که ریدر یک رکورد(سطر) از تیبل را می خواند.

= = = = == = = = = =
گام سوم: می خواهیم کاربر با نوشتن در یک تکست باکس مقدار فیلد Code را انتخاب کند.
فقط کوئری به شکل زیر تغییر می کند.
کد:
            myOleDbCommand.CommandText =
      "SELECT * " +
      "FROM PROJECT " +
      "WHERE Code = '" + textBox1.Text + "'";
دیتابیس مذکور را هم از اینجا با حجم حدود 300 کیلو دانلود کنید.
http://www.hammerdata.com/Google/ClassProjects.mdb
 
آخرین ویرایش:

sara_she

Member
با سلام
در مورد Sqlserver‌ من مشكلي با نصب vs stadio.net 2003 همراه با sql server2000 نداشتم و sql server هم به صورت client/ server‌ تعريف كردم

در مورد ايجاد conection هم من از wizard‌آماده استفاده مي كنم يعني با انتخاب oledbadapter از زبانه data هم adapterايجاد مي شه و هم oledbconnection ولي براي نوشتن syntax دستورات Sql‌ مشكل دارم تو vb.net‌ به صورت زير مي نوشتم:
کد:
 DataSet *dataSet11=new DataSet;
				 str="SELECT * FROM project WHERE code=S'"+ textBox1->Text + "'";
				  OleDbDataAdapter *oleDbDataAdapter1= new OleDbDataAdapter(str,oleDbConnection1);
	 			  oleDbDataAdapter1->Fill(dataSet11,S"project");

ولي اينجا طبق چيزي كه شما گفتيد اگه عمل كنم خطاي زير رو مي ده:
error C2110: '+' : cannot add two pointers
 

sara_she

Member
اگه Ebook كتابي در مورد vs c++.net داشته باشين مثل ديتل ديتل يا جعفر نژاد
لينكشو بذارين ممنون مي شم
 

saalek110

Well-Known Member
در مورد sql server 2003 آیا شما توانسته اید به آن کانکت بشوید و با دیتابیس کار کنید؟
در مورد سینتکس کوئری در سی پلاس در محیط سی پلاس امتحان می کنم.
در مورد ایجاد اتوماتیک کانکشن ممنون.
در مورد کتاب : ((سی شارپ هاو تو پراگرام))

Visual C#® 2005: How to Program, Second Edition
By H. M. Deitel - Deitel & Associates, Inc., P. J. Deitel - Deitel & Associates, Inc.
Publisher : Prentice Hall
Pub Date : December 15, 2005
Print ISBN-10 : 0-13-152523-9
Print ISBN-13 : 978-0-13-152523-8
eText ISBN-10 : 0-13-133214-7
eText ISBN-13 : 978-0-13-133214-0
Pages : 1648
لینکش در تاپیک یادگیری سی شارپ هست.


Visual C# 2005 How to Program (2nd Edition
a3.gif

چون سایت وارز بود عکس لینک را گذاشتم. خودتان تایپ کنید.
باید اینجا ثبت نام کنید تا بتوانید مجانی دانلود کنید.
حجم : در حدود 28 مگا.

یکی هم هست برای سی پلاس که لینکش در یک تاپیک دیگه هست ولی کدنویسی پایه سی پلاس هست نه سی پلاس دات نت. و کتاب وی اس سی پلاس هم نگاه می کنم ببینم چه کتابهایی دارم. کتاب فارسی هم هر چی بوده در تاپیک سی شارپ لینک داده ام. البته به نظرم اگر جدای از تفاوت سینتکس وی بی و سی شارپ و سی پلاس نگاه کنیم کتابهای مفیدی هست. تا آنجا که به چشم من آمده کتاب سی پلاس دات نت خیلی کم پیدا میشه. ولی وی بی دات نت و سی شارپ خیلی زیاده. من نگاه می کنم کتابهایی از وی بی دات نت و سی شارپ را انتخاب می کنم. البته سعی می کنم بیشتر سی شارپ باشه نه وی بی دات نت.(به خاطر نزدیک تر بودن سینتکس و بعضی صفات خاص وی بی دات نت)
 
آخرین ویرایش:

saalek110

Well-Known Member
درسته. تقریبا هر کتابی بخواهید اینجا پیدا میشه.

اینجا:
http://www.flazx.com/category126.php
قسمت
Visual C++ .NET
است که حدود 15 کتاب دارد. من زیاد این کتابها را نخواندم. چون بیشتر به سی شارپ توجه داشتم ولی شما چون رشته اتان است می توانید همه را مرور کنید.
من همیشه کتابهای خودم را با این سایت مطابقت می دهم.
البته در اون سایت که لینکش را به شکل عکس گذاشتم با ئی میل خود عضو شوید و هر وقت کتاب جدید بیاید لیست کتب جدید را برای شما ارسال می کند. سعی کنید با اکسپلورر بروید به این سایت تا در فرمها دچار مشکل نشوید.از سرچ سایت هم استفاده کنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
به نقل از :
دنبال كتابهاي خفن هستي!!! بيا تو حال كن!!!( دانلود كن ) ‏
==========================

http://giuciao.altervista.org/free_books.html
کتابهای خوبی اینجا پیدا میشه ولی بعضی پسوردشان اشتباه است.



http://www.ghafaseh.com/search.php?sort=4,3,tarikh
در تاپیک اصلی گوینده گفته کتاب است ولی من نگشتم.


--------------------
http://www.gayanb.com/



Free computer books
Best free J2EE books
Best free .NET books
Best free XML books
Best free PHP books
Free Java books
Free J2EE books
Free JSP books
Free J2ME books
Free .NET books
Free C# books
Free ASP.NET books
Free VB.NET books
Free VS.NET books
Free Oracle books
Free Linux books
Free MySql books
More free books
Free MSDN Mags
Free Oracle Mags
Free software CDs​
 
آخرین ویرایش:

saalek110

Well-Known Member
من تمام وقتم را این چند روز روی دیتابیس گذاشته ام. ولی هنوز به بررسی آن خطا در سی پلاس نرسیده ام.

فعلا دو نکته بگم :

یکی کاربرد @ :



Strings in C# can be @-quoted or quoted. A quoted string will treat a single backslash as an escape
character and a double backslash as a backslash. An @-quoted string will prevent escape characters
from being processed.


این علامت( @) برای بر حذر داشتن از چنین عملیاتی است. که بدون آن رخ می دهد(به طور طبیعی)


عملیات مذکور عبارت است از:
تک بک اسلش می شود escape و دو بک اسلش می شود مساوی یک بک اسلش.

از کتاب:
Advanced
C# Programming
Paul Kimmel

======================
نکته دوم معرفی یک کتاب است :
Pro Visual C++ /CLI and the .NET 2.0 Platform
1590596404.01.MZZZZZZZ.jpg

http://www.flazx.com/ebook4985.php

حجم pdf ئی که روی هارد من است 23 مگا است.

فصل دوازدم این کتاب:
■CHAPTER 12 ADO.NET and Database Development

کدهایی را نقل می کنم از این فصل:
کد:
dAdapt->SelectCommand =
gcnew SqlCommand("SELECT AuthorID, LastName, FirstName"
"FROM Authors", connect);

gcnew SqlCommand("INSERT INTO Authors (LastName, FirstName) "
"VALUES (@LastName, @FirstName)", connect);

gcnew SqlCommand("UPDATE Authors SET "
"LastName = @LastName, FirstName = @FirstName, "
"WHERE AuthorID = @AuthorID", connect);
dAdapt->UpdateCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50,
"FirstName");
dAdapt->UpdateCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4,
"AuthorID");

gcnew SqlCommand("UPDATE Authors SET "
"LastName = @LastName, FirstName = @FirstName, "
"AuthorID = @AuthorID "
"WHERE AuthorID = @OldAuthorID", connect);

dAdapt->DeleteCommand =
gcnew SqlCommand("DELETE FROM Authors "
"WHERE AuthorID = @AuthorID", connect);
dAdapt->DeleteCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4,
"AuthorID");
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه ای را که در پستهای قبلی با سی شارپ کار کرده بودم(لینک )را در ویژوال سی پلاس 2005(از نوع clr ) تست کردم. با سینتکس زیر اجرا شد:(کد زیر را درون رویداد کلیک دکمه قرار دهید- و همچنین اضافه کردن یک تکست باکس و using کردن System::Data::OleDb )

کد:
				String ^constr ="Provider=Microsoft.JET.OLEDB.4.0;data source=.\\ClassProjects.mdb";
			
        OleDbConnection ^con = gcnew OleDbConnection(constr);
		OleDbCommand ^myOleDbCommand = con->CreateCommand();
		            myOleDbCommand->CommandText =
      "SELECT * " +
      "FROM PROJECT "+
      "WHERE Code = '" + textBox1->Text + "'";
        con->Open();
			OleDbDataReader ^myOleDbDataReader = myOleDbCommand->ExecuteReader();
            myOleDbDataReader->Read();


			MessageBox::Show("myOleDbDataReader[\" Code\"] = " + myOleDbDataReader["Code"]);
			MessageBox::Show("myOleDbDataReader[\" Number\"] = " + myOleDbDataReader["Number"]);
			MessageBox::Show("myOleDbDataReader[\" Title\"] = " + myOleDbDataReader["Title"]);
			MessageBox::Show("myOleDbDataReader[\" Due\"] = " + myOleDbDataReader["Due"]);
			MessageBox::Show("myOleDbDataReader[\" Points\"] = " + myOleDbDataReader["Points"]);
       con->Close();
 
آخرین ویرایش:

saalek110

Well-Known Member
ممنون دوست عزیز.
در وی سی 2003 همان خطا را گرفتم که دوستمان گرفته. عجیبه که سینتکس از 2003 تا 2005 این قدر تغییر کرده .
در امول یکسری کتاب برای 2003 پیدا کردم ولی هنوز دانلود نکردم.

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

sara_she

Member
سلام
از اين همه توجه واقعأ ممنون
در مورد كد آخري كه گذاشتين من اونو تست كردم ولي بازم مشكلم حل نشد اصولا من با + مشكل دارم و هر جا استفاده مي كنم مثل سه جايي كه تو كد شما به كار رفته بود خطاي زير رو ميده:
error C2110: '+' : cannot add two pointers

كد شما تو c++.net 2003 بود؟ چون براي تعريف از ^ استفاده كرده بوديد در حالي كه من از * استفاده مي كنم
من هيچ شرطي رو نمي تونم چك كنم و از اونجايي كه هم براي insert و delete و هم update‌به استفاده از where نياز دارم كارم به كلي راكد شده .اگه راه حلي به ذهتنتون مي رسه لطفا كمكم كنيد من اصلا نمي دونم چرا با + مشكل داره اگه بجاش & هم بذارم خطاي زير رو داره:

* error C2297: '&' : illegal, right operand has type 'System::String __gc
تازه با @ هم كه تو كد نمونه از اون كتاب هم گذاشتين مشكل حل نمي شه

از بابت لينك هايي كه گذاشتين ممنون ولي در مورد اينكه چرا يكي دو روز نبودم تقصير از من نبود چون به دليلي مشكلي كه با اين كدهاي مسخره پيدا كردم هرروز صبح اولين كارم چك كردن اين تاپيك است ولي نمي دونم چرا وبلاگ باز نمي شدو database error مي داد
 
آخرین ویرایش:

saalek110

Well-Known Member
سلام . کدی که با ^ نوشته شده به جای * در ویژوال سی ++ دات نت 2005 است. خودم چک کردم و جواب داد. و نمی دانم چرا نسبت به 2003 این تغییر سینتکس داده شده. شایدم من به چیزی توجه نکردم.
در مورد کوئری هم با سینتکس بالا در 2005 اجرا شد.
-----------------
اما در وی سی ++ دات نت 2003 :
من تست کردم همان خطاهایی را می دهد که به شما می دهد.cannot add two pointers و با @ هم یک خطای دیگر.
----------------
ادامه کار:
من در سرچ وی سی ++ دات نت در گوگل مشکل دارم. و کتاب وی سی دات نت هم کمتر است نسبت به سی شارپ و وی بی دات نت.
من ایمول را نصب کردم تا دنبال کتابها بگردم. و همچنین کدها. فعلا یک کتاب دو مگائی دانلود کردم. البته هنوز نخواندم و نمی دانم چه مباحثی دارد ولی آپلود می کنم .(لینک دانلود- حجم 2 مگا.) باز هم منابعی مورد نیاز است تا سینتکس درست بدست بیاید.

در مورد فروم 2 روز بود باز نمیشد. شبها بعد ساعت 1 هم امکان پست زدن نیست(ده روزه) یا با مشکل زیاد همراه است.
 
آخرین ویرایش:

saalek110

Well-Known Member
فکر کنم قضیه با کد زیر دیگه حل بشود(البته این کد مربوط به مثال آن کتاب است. منظورم قسمت کوئری آن است. در پست بعدی مثال خودم را با این روش حل کرده ام):
از کتاب پست قبل(Microsoft® Visual C++® .NET 2003 Kick Start ) فصل 11 .
کد:
DataSet* Employee::Lookup(String* name)
{
    DataSet* ds = new DataSet("Employees");

    StringBuilder* query = new StringBuilder();
    query->Append("SELECT * FROM Employees WHERE EmployeeName Like '%");
    query->Append(name);
    query->Append("%'");

    OleDbDataAdapter* adapter = new OleDbDataAdapter(query->ToString(),
                                                     ConnStr);

    try
    {
        adapter->Fill(ds," Employees");
    }
    catch (OleDbException* e)
    {
        Console::WriteLine("OleDbException caught while filling the dataset");
        Console::WriteLine(e->Message);
    }
    return ds;
}
که از کلاس استرینگ بیلدر استفاده کرده. من دیشب در وی سی 2003 با این کلاس کار کردم و توانستم به راحتی از این کلاس استفاده کنم. ولی کوئری ام را به مرحله تست نگذاشتم. و امشب در این کتاب دیدم که واقعا از این کلاس باید استفاده شود.
بی زحمت تست کنید.
 
آخرین ویرایش:

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

بالا