MFC控件中的值写入SQL数据库中 怎么实现
MFC控件中的值写入SQL数据库中 如何实现
UpdateData();
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));
CString strSQL = "select * from staff";
BSTR bstrSQL = strSQL.AllocSysString();
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mana;Data Source=(local)";//SQL Server
// pConn->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=mana;Initial Catalog=mana";//ODBC Driver
pRst->Open((_variant_t)strSQL,(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);
CString m_strSAddSex;
switch (m_iSAddSex)
{
case 0:m_strSAddSex="男";
break;
case 1:m_strSAddSex="女";
break;
}
m_tSAddBirthDate.GetTime();//获得控件上的时间
m_strSAddBirthDate=m_tSAddBirthDate.Format("'%Y-%m-%d'");//将CTime转换成CString格式
m_tSAddEnterDate.GetTime();
m_strSAddEnterDate=m_tSAddEnterDate.Format("'%Y-%m-%d'");//将CTime转换成CString格式
GetDlgItem(IDE_STAFF_ADD_ID)->GetWindowText(m_strSAddID);
GetDlgItem(IDE_STAFF_ADD_NAME)->GetWindowText(m_strSAddName);
GetDlgItem(IDE_STAFF_ADD_HOMEADDR)->GetWindowText(m_strSAddHomeAddress);
GetDlgItem(IDE_STAFF_ADD_OCCUPATION)->GetWindowText(m_strSAddOccupation);
GetDlgItem(IDE_STAFF_ADD_REMARK)->GetWindowText(m_strSAddRemark);
pRst->AddNew();
CString sqlstr;
sqlstr.Format("INSERT INTO staff(ID,name,sex,address,Occupation,Remarks)VALUES('%s','%s','%s','%s','%s','%s')",m_cstrSAddID,m_strSAddName,m_strSAddSex,m_strSAddHomeAddress,m_strSAddOccupation,m_strSAddRemark);
pConn->Execute((_bstr_t)sqlstr,NULL,adCmdText);
pRst->Update();
pRst->Close();
pConn->Close();
CoUninitialize();
我的代码如上。编译过程没有错误,在运行时说"This application has requested the Runtime to terminate it in an unusual way"求高人指点~~~
顺便问一下IDC_DATETIMEPICKER1控件 怎么把时间变量 取出来变成字符串类型
------解决方案--------------------
你只是设置了连接字符串,但是没有建立连接
------解决方案--------------------
这个么?
FormatDateTime('yyyy-mm-dd',datetimepicker1.datetime)
------解决方案--------------------
日期控件应该有接口可以获取当前选择的日期的,可能获取到的日期对象是一个CTime或COleDateTime类型的对象,这些对象中都有一个接口CString Format(),可以将时间转为字符串,具体用法你可以参考一下MSND
------解决方案--------------------
pRst->Open前先调用pConn->Open("", "", "", adConnectUnspecified);
另外ADO代码最好加上try catch
------解决方案--------------------
连接数据库:
try
{
// 创建Connection对象
pConn.CreateInstance("ADODB.Connection");
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mana;Data Source=(local)";//SQL Server
pConn->Open(_bstr_t(""),_bstr_t(""),_bstr_t(""),adModeUnknown);//连接数据库
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
dberr = (char *)e.Description();
AfxMessageBox(dberr);
}
------解决方案--------------------
你数据库确定是Windows集成验证?不需要密码么?
自己不用代码Connection是成功的么?
m_pConnection->Open("Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=PersonManager;Data Source=KISSTEA-PC\\SQLEXPRESS","","",adModeUnknown);
UpdateData();
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));
CString strSQL = "select * from staff";
BSTR bstrSQL = strSQL.AllocSysString();
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mana;Data Source=(local)";//SQL Server
// pConn->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=mana;Initial Catalog=mana";//ODBC Driver
pRst->Open((_variant_t)strSQL,(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);
CString m_strSAddSex;
switch (m_iSAddSex)
{
case 0:m_strSAddSex="男";
break;
case 1:m_strSAddSex="女";
break;
}
m_tSAddBirthDate.GetTime();//获得控件上的时间
m_strSAddBirthDate=m_tSAddBirthDate.Format("'%Y-%m-%d'");//将CTime转换成CString格式
m_tSAddEnterDate.GetTime();
m_strSAddEnterDate=m_tSAddEnterDate.Format("'%Y-%m-%d'");//将CTime转换成CString格式
GetDlgItem(IDE_STAFF_ADD_ID)->GetWindowText(m_strSAddID);
GetDlgItem(IDE_STAFF_ADD_NAME)->GetWindowText(m_strSAddName);
GetDlgItem(IDE_STAFF_ADD_HOMEADDR)->GetWindowText(m_strSAddHomeAddress);
GetDlgItem(IDE_STAFF_ADD_OCCUPATION)->GetWindowText(m_strSAddOccupation);
GetDlgItem(IDE_STAFF_ADD_REMARK)->GetWindowText(m_strSAddRemark);
pRst->AddNew();
CString sqlstr;
sqlstr.Format("INSERT INTO staff(ID,name,sex,address,Occupation,Remarks)VALUES('%s','%s','%s','%s','%s','%s')",m_cstrSAddID,m_strSAddName,m_strSAddSex,m_strSAddHomeAddress,m_strSAddOccupation,m_strSAddRemark);
pConn->Execute((_bstr_t)sqlstr,NULL,adCmdText);
pRst->Update();
pRst->Close();
pConn->Close();
CoUninitialize();
我的代码如上。编译过程没有错误,在运行时说"This application has requested the Runtime to terminate it in an unusual way"求高人指点~~~
顺便问一下IDC_DATETIMEPICKER1控件 怎么把时间变量 取出来变成字符串类型
------解决方案--------------------
你只是设置了连接字符串,但是没有建立连接
------解决方案--------------------
这个么?
FormatDateTime('yyyy-mm-dd',datetimepicker1.datetime)
------解决方案--------------------
日期控件应该有接口可以获取当前选择的日期的,可能获取到的日期对象是一个CTime或COleDateTime类型的对象,这些对象中都有一个接口CString Format(),可以将时间转为字符串,具体用法你可以参考一下MSND
------解决方案--------------------
pRst->Open前先调用pConn->Open("", "", "", adConnectUnspecified);
另外ADO代码最好加上try catch
------解决方案--------------------
连接数据库:
try
{
// 创建Connection对象
pConn.CreateInstance("ADODB.Connection");
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mana;Data Source=(local)";//SQL Server
pConn->Open(_bstr_t(""),_bstr_t(""),_bstr_t(""),adModeUnknown);//连接数据库
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
dberr = (char *)e.Description();
AfxMessageBox(dberr);
}
------解决方案--------------------
你数据库确定是Windows集成验证?不需要密码么?
自己不用代码Connection是成功的么?
m_pConnection->Open("Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=PersonManager;Data Source=KISSTEA-PC\\SQLEXPRESS","","",adModeUnknown);