PDA

View Full Version : ارتباط با بانک اطلاعاتی در TC و ++C



milad-fa
یک شنبه 25 اردیبهشت 1390, 22:39 عصر
با عرض سلام خدمت تمامی دوستان.
من در زبان برنامه نویسی C تازه کار هستم و اطلاعات زیادی ندارم.
میخواستم بدونم با هر کدام از زبانهای TC و 6.0 ++C با چه بانک های اطلاعاتی میشه ارتباط برقرار کرد؟
آیا امکان برقراری ارتباط با SQL Server وجود داره؟
اگه یه مثال برقراری ارتباط با یکی از این دو زبان با هر بانک اطلاعاتی هم بگذارید ممنون میشم.
با تشکّر.

r00tkit
دوشنبه 26 اردیبهشت 1390, 07:47 صبح
سلام
قبلش باید با چند تا مفهوم اشنا بشی تا این سوال رو نپرسی
TC is dead


کد زیر رو فقط به عنوان مثال داشته باش ( اتصال به SQL server با C/C++

d#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>

using namespace std;

void show_error(unsigned int handletype, const SQLHANDLE& handle){
SQLCHAR sqlstate[1024];
SQLCHAR message[1024];
if(SQL_SUCCESS == SQLGetDiagRec(handletype, handle, 1, sqlstate, NULL, message, 1024, NULL))
cout<<"Message: "<<message<<"\nSQLSTATE: "<<sqlstate<<endl;
}

int main(){

SQLHANDLE sqlenvhandle;
SQLHANDLE sqlconnectionhandle;
SQLHANDLE sqlstatementhandle;
SQLRETURN retcode;

if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
goto FINISHED;

if(SQL_SUCCESS!=SQLSetEnvAttr(sqlenvhandle,SQL_ATT R_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
goto FINISHED;

if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
goto FINISHED;

SQLCHAR retconstring[1024];
switch(SQLDriverConnect (sqlconnectionhandle,
NULL,
(SQLCHAR*)"DRIVER={SQL Server};SERVER=localhost, 1433;DATABASE=MyDatabase;UID=sa;PWD=Admin-123;",
SQL_NTS,
retconstring,
1024,
NULL,
SQL_DRIVER_NOPROMPT)){
case SQL_SUCCESS_WITH_INFO:
show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
break;
case SQL_INVALID_HANDLE:
case SQL_ERROR:
show_error(SQL_HANDLE_DBC, sqlconnectionhandle);
goto FINISHED;
default:
break;
}

if(SQL_SUCCESS!=SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle))
goto FINISHED;

if(SQL_SUCCESS!=SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"select * from testtable", SQL_NTS)){
show_error(SQL_HANDLE_STMT, sqlstatementhandle);
goto FINISHED;
}
else{
char name[64];
char address[64];
int id;
while(SQLFetch(sqlstatementhandle)==SQL_SUCCESS){
SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &id, 0, NULL);
SQLGetData(sqlstatementhandle, 2, SQL_C_CHAR, name, 64, NULL);
SQLGetData(sqlstatementhandle, 3, SQL_C_CHAR, address, 64, NULL);
cout<<id<<" "<<name<<" "<<address<<endl;
}
}

FINISHED:
SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle );
SQLDisconnect(sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);

}

اینم بخونی بد نیست :
http://www.easysoft.com/developer/languages/c/odbc_tutorial.html

milad-fa
دوشنبه 26 اردیبهشت 1390, 21:42 عصر
با سلام،
ممنون دوست عزیز،


قبلش باید با چند تا مفهوم اشنا بشی تا این سوال رو نپرسی
چه مفهوم هایی؟!

TC is dead
؟!!!!!

کد زیر رو فقط به عنوان مثال داشته باش
پس خدا رو شکر میشه با SQL ارتباط برقرار کرد.
ممنون ولی من میخواستم مفهومی متوجه بشم.آیا هیچ تاپیکی در مورد ارتباط C با بانک اطلاعاتی تو تالار نیست؟!
من جستجو کردم ولی چیزی پیدا نشد.
من فکر کنم کاری که میخوام انجام بدم رو توضیح بدم بهتر باشه.
دوستان من میخوام اطلاعات یکسری از افراد از قبیل نام،نام خانوادگی،سن،آدرس رو ذخیره کنم.
اطلاعات در سطح بسیار محدودی هست،فوقش 50 نفر.
بعد بتونم عملیات حذف،گزارش گیری بر فرض افرادی که سن زیر 25 سال دارند و ... رو انجام بدم.
برای اینکار میخواستم با بانک اطلاعاتی ارتباط برقرار کنم ولی اینطوری که از شواهد پیداست کار چندان ساده ای هم نیست.
شما برای انجام همچین کاری چه روشی رو پیشنهاد می کنید؟
به چه روش هایی میتونم اطلاعات رو ذخیره کنم که ساده باشه؟
با تشکر.

tdkhakpur
دوشنبه 26 اردیبهشت 1390, 22:45 عصر
برای اینکار میخواستم با بانک اطلاعاتی ارتباط برقرار کنم ولی اینطوری که از شواهد پیداست کار چندان ساده ای هم نیست.
شما برای انجام همچین کاری چه روشی رو پیشنهاد می کنید؟
به چه روش هایی میتونم اطلاعات رو ذخیره کنم که ساده باشه؟

همه بانکهای اصلاعاتی داخل سایت خودشان جزئی هم که شده نحوه ارتباط بصورت native رو قرار میدن یک سری به اونجا ها هم بزنید.
ولی اگر میتوانید از dll استفاده کنید اینجاirdataBase زیربنای بانکهای اطلاعاتی (http://barnamenevis.org/showthread.php?240356-irdataBase-زیربنای-بانکهای-اطلاعاتی) رو مطالعه کنید و خبر بدید dll مربوط به سی ارسال نشده تا ارسال بشه.

r00tkit
دوشنبه 26 اردیبهشت 1390, 23:03 عصر
از sqlite استفاده کن :
http://www.lemoda.net/sqlite/c-select/index.html
http://milky.manishsinha.net/2009/03/30/sqlite-with-c/