问题描述如下:
实现一个通用方法,要求在任意给定的表的情况下,自动生成该表的数据的insert sql语句。
我的想法是:用ADO得到表中字段的名字,字段的类型(这里是不是要做个字段类型转换,把sqlserver的类型转换成程序中的类型?),然后组织成insert语句。不知道我的想法可行吗?请高手指点。
实现一个通用方法,要求在任意给定的表的情况下,自动生成该表的数据的insert sql语句。
我的想法是:用ADO得到表中字段的名字,字段的类型(这里是不是要做个字段类型转换,把sqlserver的类型转换成程序中的类型?),然后组织成insert语句。不知道我的想法可行吗?请高手指点。
解决方案 »
- 在MFC中,怎样用winsock控件实现多客户端通讯?
- 急问:关于panel
- 请问如何实现通过按钮控制多个ie窗口的切换
- vc++下带datetime时间属性的insert插入语句怎么写啊?
- 关于WinInet.dll库函数使用的问题!(在线等)
- USB通讯问题,请各位朋友帮帮忙~~~
- 跨线程子类化问题(DLL中的类子类化EXE中的控件)
- memcpy的一个问题,急!!!
- VC++ SOCKET 如何组成XML包发送?
- 谁有InstallShield 6.3 专业版的教程或者中文帮助,一定给分
- 我希望窗口在 RESTORE 的时候 RESTORE 到一个固定的位置,但结果。。。。。。
- ATL7里面的CComSafeArray可以在VC6里面用吗?
#include <conio.h>
#define PAUSE printf("\npress any key to exit"); getch();#define _WIN32_DCOM#pragma warning(push)
#pragma warning(disable:4146)
#import "e:\program files\common files\system\ado\MSADO15.DLL" no_namespace rename("EOF", "EndOfFile")
#pragma warning(pop)int main(int argc, char* argv[])
{
_ConnectionPtr m_pConn;
_RecordsetPtr m_pRs;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
_bstr_t bstrConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=F:\\lylong\\db1.mdb;Persist Security Info=False";
try{
m_pConn.CreateInstance( __uuidof(Connection) );
m_pRs.CreateInstance( __uuidof(Recordset) );
m_pConn->Open( bstrConnStr, "", "", adConnectUnspecified );
m_pRs->Open( "table1",
m_pConn.GetInterfacePtr(), adOpenForwardOnly, adLockOptimistic, adCmdTable); long lColumn = m_pRs->Fields->Count;
printf("%-12s%-10s%-10s\n", "字段名", "长度", "类型");
for( long i=0; i<lColumn; i++ )
{
printf("%-12s%-10d%-10d\n", (char*)m_pRs->Fields->Item[i]->Name,
m_pRs->Fields->Item[i]->DefinedSize,
m_pRs->Fields->Item[i]->Type);
}
m_pRs->Close();
m_pConn->Close();
}catch( _com_error e )
{
printf( "\n%s Error: %ld\r\n"
"%s\r\n"
"%s\r\n",
(char*)e.Source(),
e.Error(),
(char*)e.Description(),
(char*)e.ErrorMessage() );
m_pRs->Close();
m_pConn->Close();
}
CoUninitialize();
PAUSE;
return 0;
}
--------------------------------
_RecordsetPtr m_pRs;
_variant_t vFieldName;
for(int I=0; I<m_pRecordset->Fields->Count; I++)
{
vFieldName=m_pRecordset->Fields->GetItem((long)intI)->Name;
CString str=vFieldName.bstrVal;
}
-------------------------------------
int iCols=m_pRecordset->Fields->GetCount();
_variant_t vardata;
vardata.vt=VT_I4;
vardata.iVal=iCols;
for(vardata.iVal=0;vardata.iVal<iCols;vardata.iVal++)
{
_bstr_t bstrCols=m_pRecordset->Fields->GetItem(vardata.iVal)->GetName();
MessageBox(bstrCols);
}
-------------------------
_bstr_t mStrSQL;
CString strColName;
BSTR bstrColName;
long ColCount,i;
Field * field = NULL;
HRESULT hr;
Fields * fields = NULL;
LPCTSTR nameField;
//打开记录集,得到字段名,并将字段名信息添加到ListBox中mStrSQL = "SELECT * FROM Images";m_pRecordset->Open(mStrSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和
if(SUCCEEDED(hr))
fields->get_Count(&ColCount); //得到记录集的字段集合中的字段的总个数 for(i=0;i<ColCount;i++)
{
fields->Item[i]->get_Name(&bstrColName); //得到记录集//中的字段名
strColName=bstrColName;
nameField = strColName;
m_FieldsList.AddString(nameField);
} if(SUCCEEDED(hr))
fields->Release();//释放指针