PDA

Tam Sürümünü Görmek İçin : C++ .NET ve SQL Server 2005 bağlantısı


kadiritu
18/04/2007, 00:20
Merhaba,
c# ile çok rahatlıkla ms sql veritabanı bağlantısını kurup sorgulamaları yapabiliyorum ama c++ ile ne yazık ki hiç bir kaynak bulamadım. Hazırlamam gereken proje bundan dolayı gecikti. Herhangi bir kaynak veya site linki verirseniz çok müteşekkir kalacağım. (C++ .NET kullanacağım platform)


kadiritu
26/04/2007, 16:23
Sanırım sadece .NET platformuyla çözüme gidemeyeceğim. ODBC kullanmam gerecek fakat bunla ilgili de sorunlar çıktı yine. c++ kodundan odbc ile dosyaya bağlanamadım. Sorun nereden kaynaklanıyor acaba. Bağlantı kısmı şu şekilde:

retcode = SQLDriverConnect( //SQL_NULL_HDBC,
hdbc,
NULL,
(SQLWCHAR*)"DRIVER=SQL Server;UID=kadiritu;DATABASE=logo.MDF;WSID=KADIRIT U;APP=Microsoft Data Access Components;Trusted_Connection=Yes;SERVER=KADIRITU\ \SQLEXPRESS",
_countof("DRIVER=SQL Server;UID=kadiritu;DATABASE=logo.MDF;WSID=KADIRIT U;APP=Microsoft Data Access Components;Trusted_Connection=Yes;SERVER=KADIRITU\ \SQLEXPRESS"),
(SQLWCHAR*)OutConnStr,
255,
&OutConnStrLen,
SQL_DRIVER_NOPROMPT );

acehreli
26/04/2007, 19:50
Benim deneyimim yok. Su sayfayi gordun degil mi:

http://www.mysql.com/products/connector/

Orada C arayuzu ve .NET baglantilari var. Gordugunden emin olmak istedim... :)

Ali

golgepapaz
26/04/2007, 20:13
C++ .net platformu derken managed c++ dan bahsetmiyorsundur umarim..eger oyleyse C#dan cok da fazla farki yok... sample larin icinde olmasi lazim.. ama ANSI/ISO C++ diyorsan tamamemn farkli tabii. QT nin SQL bindingleri oldugunu biliyorum yalnizca SQL SERVER 2005 icin.

kadiritu
26/04/2007, 20:42
C++ .net platformu derken managed c++ dan bahsetmiyorsundur umarim..eger oyleyse C#dan cok da fazla farki yok... sample larin icinde olmasi lazim.. ama ANSI/ISO C++ diyorsan tamamemn farkli tabii. QT nin SQL bindingleri oldugunu biliyorum yalnizca SQL SERVER 2005 icin.

Managed c++ benden uzak dursun :) Ben de c#da dll yazıp c++ kodunda import edip methodları kullanmayı düşünmüştüm ama sonuç hüsran oldu. Methodların veri dönüş tiplerini C++taki veri türlerine dönüştürmeyi berecemedim. C++ ile mssql database'e bağlanmayla ilgili nette hiç bir döküman bulamadım. Eğer çözüme ulaşırsam ayrıntılı bir döküman hazırlayıp paylaşmayı düşünüyorum.

kadiritu
26/04/2007, 20:46
Benim deneyimim yok. Su sayfayi gordun degil mi:

http://www.mysql.com/products/connector/

Orada C arayuzu ve .NET baglantilari var. Gordugunden emin olmak istedim... :)

Ali

Bu sayfalara bakmamıştım. msdn sayfalarında bağlantı ile ilgili kodları incelemiştim. Şimdi bakıyorum

PlayG7SeveN
26/04/2007, 22:32
evet arkadaşalr mssql ile iligili hiç bir dökaman yok gibi sanırım.
istersen bir mssql header dosyalarını arattırsane googleden belki onunla iligli kaynak çıkabilir... ( #include <mssql.h> ) gibi tabi hangi header dosyaları var aklımda deyil...

Revne
26/04/2007, 23:19
http://www.kbcafe.com/articles/HowTo.ADO.CPlusPlus.pdf

Burada anlatıldıgı gibi ADO kullanarak herhangi bir veritabanı sistemine ulaşabilirsin...

yapman gereken sadece Connection String ifadesini değiştirmek..

Kolay Gelsin...

golgepapaz
27/04/2007, 00:08
http://www.kbcafe.com/articles/HowTo.ADO.CPlusPlus.pdf

Burada anlatıldıgı gibi ADO kullanarak herhangi bir veritabanı sistemine ulaşabilirsin...

yapman gereken sadece Connection String ifadesini değiştirmek..

Kolay Gelsin...

evet ado kesinlikle isine yarayabilir. zamaninda C++ Builder ile bolca kullanmistim.ayrica C# assemblylerin com type librarylere cevirip unmanaged tan managed code'a erisebilirsin .Ama tavsiyem ado olacak yinede....

kadiritu
02/05/2007, 12:16
Pdfteki ado için yazılan kodları birebir alarak derlemeye çalıştım ama onu aşgın hata aldım. Windows console application ile kodları derlemeye çalıştım. Bunların haricinde yapmam gereken bir şey varmı? Ya da bu kodları derleyebilen varsa nasıl derleyebildiğini söyleyebilirmi? Kullanılan kod aşağıdadır.

#include <iostream>
#include <string>
#import "C:\Program files\Common Files\System\Ado\msado15.dll"
rename("EOF", "ADOEOF")
std::string outputashex(unsigned long l)
{
char buffer[1024];
::itoa(l, buffer, 16);
return buffer;
} ;
void main()
{
HRESULT hr;
CoInitialize(NULL);
try
{
ADODB::_ConnectionPtr connection;
hr = connection.CreateInstance(__uuidof(ADODB::Connecti on));
if (FAILED(hr))
{
throw _com_error(hr);
}
ADODB::_RecordsetPtr recordset;
hr = recordset.CreateInstance(__uuidof(ADODB::Recordset ));
if (FAILED(hr))
{
throw _com_error(hr);
}
connection->CursorLocation = ADODB::adUseClient;
connection->Open(L"Provider=sqloledb;Data Source=fifa;"
L"Initial Catalog=test;User Id=testsa;Password=testsa;", L"",
L"", ADODB::adConnectUnspecified);
recordset->Open("CREATE TABLE mytable (value NVARCHAR(255))",
connection.GetInterfacePtr(), ADODB::adOpenForwardOnly,
ADODB::adLockReadOnly, ADODB::adCmdText);
recordset->Open("INSERT INTO mytable VALUES ('Hello')",
connection.GetInterfacePtr(), ADODB::adOpenForwardOnly,
ADODB::adLockReadOnly, ADODB::adCmdText);
recordset->Open("INSERT INTO mytable VALUES ('Goodbye')",
connection.GetInterfacePtr(), ADODB::adOpenForwardOnly,
ADODB::adLockReadOnly, ADODB::adCmdText);
recordset->Open("SELECT * from mytable",
connection.GetInterfacePtr(),
ADODB::adOpenForwardOnly, ADODB::adLockReadOnly,
ADODB::adCmdText);
while(!recordset->ADOEOF)
{
_variant_t var;
var = recordset->Fields->GetItem(L"value")->GetValue();
std::cout << static_cast<char *>(_bstr_t(var.bstrVal))
<< std::endl;
recordset->MoveNext();
};
recordset->Close();
recordset->Open("DROP TABLE mytable", connection.GetInterfacePtr(),
ADODB::adOpenForwardOnly, ADODB::adLockReadOnly,
ADODB::adCmdText);
}
catch(_com_error &e)
{
std::cerr << ::outputashex(hr) << ":"
<< static_cast<char *>(e.Description());
}
catch(...)
{
std::cerr << "Unhandled Exception";
};
}