青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

使用VC6進行ADO編程,使用SQL SERVER 2000+WINDOWS SERVER 2003+VC6(第三部分)

轉自:http://blog.163.com/cctv_0011/blog/static/4659737620083485751408/
由于工作需要,本人初學VC6,在網上找了很多關于VC6進行ADO編程文章,但大部分都以ACCESS為數據庫,即使是使用SQL SERVER 2000也沒有用ODBC編程,不利于初學者學習,本人歷時一個月,鉆研并作出以下程序,望能拋磚引玉,對中國程序員初學者盡自己的一份力!

 

目的是將SUN等服務器產生的日志文件--文本格式,寫入到SQL SERVER數據庫,實現功能為:
1.修改源日志格式為以逗號分割字段,寫入成一個新的日志文件。
2.程序讀出新日志文件,寫入到數據庫(分別利用RecordSet和存儲過程實現)。

由于是初學VC,不當之處請高人指正,萬分感謝!

第三部分

由于工作需要,本人初學VC6,在網上找了很多關于VC6進行ADO編程文章,但大部分都以ACCESS為數據庫,即使是使用SQL SERVER 2000也沒有用ODBC編程,不利于初學者學習,本人歷時一個月,鉆研并作出以下程序,望能拋磚引玉,對中國程序員初學者盡自己的一份力!

重要提示:請大家安裝SQL SERVER 2000 SP3及VISUAL STUDIO SP6,否則程序可能不能正常運行!

本程序功能已用純C及VB6混合編程實現,但為了提高程序的執行效率,所以用VC6重寫。

如下為vcadoDlg.cpp的完整源代碼:
//
#include "stdafx.h"
#include "vcado.h"
#include "vcadoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CVcadoApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
 CAboutDlg();
// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL
// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // No message handlers
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVcadoDlg dialog
CVcadoDlg::CVcadoDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CVcadoDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CVcadoDlg)
 m_datetime = COleDateTime::GetCurrentTime();
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 m_nCurrentSel = -1;
 m_bAutoSave = TRUE;
 m_bSuccess = FALSE;
}
void CVcadoDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CVcadoDlg)
 DDX_Control(pDX, IDC_DATETIME, m_datetime2);
 DDX_Control(pDX, IDC_NAME2, m_name2);
 DDX_Control(pDX, IDC_NAME, m_name);
 DDX_Control(pDX, IDC_EXPLAIN, m_explain);
 DDX_Control(pDX, IDC_IP, m_ip);
 DDX_Control(pDX, IDC_FILEOPEN, m_fileopen);
 DDX_Control(pDX, IDC_OUT, m_out);
 DDX_Control(pDX, IDC_IN, m_in);
 DDX_Control(pDX, IDC_STRINGADD, m_stringadd);
 DDX_Control(pDX, IDC_LIST1, m_list);
 DDX_Control(pDX, IDC_ADODC1, m_adodc);
 DDX_Control(pDX, IDC_DATAGRID1, m_datagrid);
 DDX_Text(pDX, IDC_DATETIME, m_datetime);
 //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVcadoDlg, CDialog)
 //{{AFX_MSG_MAP(CVcadoDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 ON_BN_CLICKED(IDC_BUTTON2, Oninsertdb)
 ON_BN_CLICKED(IDC_BUTTON3, Onexit)
 ON_BN_CLICKED(IDC_BUTTON4, Onfilereform)
 ON_BN_CLICKED(IDC_BUTTON5, Onstringadd)
 ON_BN_CLICKED(IDC_BUTTON7, Onspinsert)
 ON_BN_CLICKED(IDC_BUTTON8, Onoutinput)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVcadoDlg message handlers
BOOL CVcadoDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 HRESULT hr;
 try
 {
 hr = m_pConnection1.CreateInstance("ADODB.Connection");///創建Connection對象
 if(SUCCEEDED(hr))
 {
 hr = m_pConnection1->Open("DSN=test;UID=;PWD=;","","",adModeUnknown);///連接數據庫
  }
 AfxMessageBox("存儲過程連接數據庫成功!");
 }
 }
 catch(_com_error e)///捕捉異常
 {
  CString errormessage;
  errormessage.Format("存儲過程連接數據庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
  AfxMessageBox(errormessage);///顯示錯誤信息
  return FALSE;
 }
 CString path;
 path="d:\\";
 SetCurrentDirectory(path);
 AfxMessageBox("當前工作路徑為d:\\");
 pedit1=(CEdit*)GetDlgItem(IDC_IN);
 pedit2=(CEdit*)GetDlgItem(IDC_OUT);
 m_in.GetDlgItem (IDC_IN);
 m_out.GetDlgItem (IDC_OUT);
 m_fileopen.GetDlgItem (IDC_FILEOPEN);
 pfileopen=(CEdit*)GetDlgItem(IDC_FILEOPEN);
 pstringadd=(CStatic*)GetDlgItem(IDC_STRINGADD);
 CString edit1,edit2,fileopen;
 edit1="in2.txt";
 edit2="out2.txt";
 fileopen="out2.txt";
 pedit1->SetWindowText(edit1);
 pedit2->SetWindowText(edit2);
 pfileopen->SetWindowText(fileopen);
 //////////為列表控件添加列//////////
 m_list.InsertColumn(0,"datetime",LVCFMT_LEFT,130);
 m_list.InsertColumn(1,"name",LVCFMT_LEFT,50);
 m_list.InsertColumn(2,"name2",LVCFMT_LEFT,50);
 m_list.InsertColumn(3,"ip",LVCFMT_LEFT,100);
 m_list.InsertColumn(4,"explain",LVCFMT_LEFT,700);
 //////////讀取數據庫中的信息添加到列表控件///////////
 _variant_t vdatetime,vname,vname2,vip,vexplain;
 vdatetime.vt =VT_DATE;
 vdatetime.date =datetime;
 try
 {
  m_pRecordset.CreateInstance("ADODB.Recordset");
  m_pRecordset->Open("SELECT * FROM T2",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  m_bSuccess = TRUE;
  while(!m_pRecordset->adoEOF)
  {
   vdatetime = m_pRecordset->GetCollect("datetime");
   vname = m_pRecordset->GetCollect("name");
   vname2 = m_pRecordset->GetCollect("name2");
   vip = m_pRecordset->GetCollect("ip");
   vexplain = m_pRecordset->GetCollect("explain");
   nItem=m_list.InsertItem(0xffff,(_bstr_t)vdatetime);
   m_list.SetItem(nItem,1,1,(_bstr_t)vname,NULL,0,0,0);
   m_list.SetItem(nItem,2,1,(_bstr_t)vname2,NULL,0,0,0);
   m_list.SetItem(nItem,3,1,(_bstr_t)vip,NULL,0,0,0);
   m_list.SetItem(nItem,4,1,(_bstr_t)vexplain,NULL,0,0,0);
   m_pRecordset->MoveNext();
  }
 AfxMessageBox("RecordSet讀取數據庫成功!");
 }
 catch(_com_error e)///捕捉異常
 {
  AfxMessageBox("RecordSet讀取數據庫失敗!");///顯示錯誤信息
 }

 // Add "About..." menu item to system menu.
 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);
 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }
 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 // TODO: Add extra initialization here
 
 return TRUE;  // return TRUE  unless you set the focus to a control
}
void CVcadoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}
// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
void CVcadoDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting
  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;
  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}
// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CVcadoDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}
void CVcadoDlg::OnOK()
{
 if(m_bSuccess)
 {
  m_pRecordset->Update();
  m_pRecordset->Close();
 }
 m_pConnection1->Close();
    CoUninitialize(); 
 CDialog::OnOK();
}
void CVcadoDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 //WinExec(strcat("notepad.exe ",m_fileopen),SW_SHOW);
 MessageBeep(0xFFFFFFFF);
 CString fileopen,text;
 pfileopen->GetWindowText(fileopen);
 text="notepad.exe "+fileopen;
 WinExec(text,SW_SHOW);
}
void CVcadoDlg::Oninsertdb()
{
 // TODO: Add your control notification handler code here
 if(UpdateData())
 if(m_name.GetWindowTextLength () >0)
 { 
 m_pRecordset->MoveLast ();
 m_pRecordset->AddNew();
 
 if(!m_pRecordset->adoEOF && nItem>= 0 && m_bAutoSave)
  {
 m_datetime2.GetWindowText (datetime2);
 m_name.GetWindowText (name);
 m_name2.GetWindowText (name2);
 m_ip.GetWindowText (ip);
 m_explain.GetWindowText (explain);

 m_pRecordset->PutCollect ("datetime",(_bstr_t)datetime2);
 m_pRecordset->PutCollect ("name",(_bstr_t)name);
 m_pRecordset->PutCollect ("name2",(_bstr_t)name2);
 m_pRecordset->PutCollect ("ip",(_bstr_t)ip);
 m_pRecordset->PutCollect ("explain",(_bstr_t)explain);
 
 m_list.SetItem (nItem,0,LVIF_TEXT,(_bstr_t)datetime2,NULL,0,0,0);
 m_list.SetItem (nItem,1,LVIF_TEXT,(_bstr_t)name,NULL,0,0,0);
 m_list.SetItem (nItem,2,LVIF_TEXT,(_bstr_t)name2,NULL,0,0,0);
 m_list.SetItem (nItem,3,LVIF_TEXT,(_bstr_t)ip,NULL,0,0,0);
 m_list.SetItem (nItem,4,LVIF_TEXT,(_bstr_t)explain,NULL,0,0,0);
  }
 m_list.SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
 m_list.SetHotItem(nItem);
 m_list.SetFocus();
 
 }
 else
  AfxMessageBox("請輸入用戶名!");
 nItem=nItem+1;
 m_adodc.Refresh ();
 m_datagrid.Refresh (); 
}
void CVcadoDlg::Onexit()
{
 // TODO: Add your control notification handler code here
 m_pConnection1->Close();
    CoUninitialize();
 CDialog::OnOK();
}
void CVcadoDlg::Onfilereform()
{
 // TODO: Add your control notification handler code here
   
 FILE *in,*out;
 char ch,ch1,ch2,ch3,ch4;
 int n=1;
 int e=-1;
 /*if (argc!=3)
 {printf("You forgot to enter a filename!\n");
 return 0;
 }*/
 CString edit1,edit2,alltext;
 pedit1->GetWindowText(edit1);
 pedit2->GetWindowText(edit2);
 if((in=fopen(edit1,"r"))==NULL)
 {AfxMessageBox("不能讀入日志文件!");
   }
 if((out=fopen(edit2,"w+"))==NULL)
 {AfxMessageBox("不能寫入數據緩沖文件!");
   }
 ch1='"';
 ch2=',';
 fputc(ch1,out);
 while((ch=fgetc(in))!=EOF)
 {
 if(ch=='\n'&&(ch4=ch3=fgetc(in))==EOF)
 {fputc(ch1,out);
  fputc('\n',out);
  n=1;
  continue;
 }
 else if(ch=='\n')
 {fputc(ch1,out);
  fputc('\n',out);
  fputc(ch1,out);
  fputc(ch4,out);
  n=1;
  continue;
 }
 //printf("\nCurrent position is byte %d\n",ftell(in));
 cout<<"\nCurrent position is byte "<<ftell(in)<<endl;
 if(ch=='.'&&n==1)
 {n=2;
  fputc(ch1,out);
     fputc(ch2,out);
  fputc(ch1,out);
  continue;
 }
 if(ch==' ')
 {fputc(ch1,out);
     fputc(ch2,out);
  fputc(ch1,out);
  continue;
 }
 putchar(ch);
 
 fputc(ch,out);
 }
 fclose(in);
 fclose(out);
 AfxMessageBox("日志文件成功轉換格式!");
}
void CVcadoDlg::Onstringadd()
{
 // TODO: Add your control notification handler code here
 CString edit1,edit2,alltext;
 //pedit1->GetWindowText(edit1);
 //pedit2->GetWindowText(edit2);
 m_in.GetWindowText (edit1);
 m_out.GetWindowText (edit2);
 if(edit1=="王")
 {MessageBeep(0xFFFFFFFF);
  alltext=edit1+"中王"+":你好棒呦!!!!!";
 }
 else alltext="讀入日志文件數據-->輸出數據到緩沖文件-->從緩沖文件讀出數據-->插入數據到數據庫。";
 pstringadd->SetWindowText(_T(alltext));
 
}
void CVcadoDlg::Onspinsert()
{
 // TODO: Add your control notification handler code here
 try
 {
 m_pCommand.CreateInstance ("ADODB.Command");
 m_pCommand->ActiveConnection =m_pConnection1;
 m_pCommand->CommandType =adCmdStoredProc;
 m_pCommand->CommandText =_bstr_t("insert_T2_1");
 //AfxMessageBox("Command建立成功!\n");
 }
 catch(_com_error eee)///捕捉異常
 {
  CString errormessage;
  errormessage.Format("Command建立失敗!\r\n錯誤信息:%s",eee.ErrorMessage());
  AfxMessageBox(errormessage);///顯示錯誤信息
 }
 
 m_datetime2.GetWindowText (datetime2);
 m_name.GetWindowText (name);
 m_name2.GetWindowText (name2);
 m_ip.GetWindowText (ip);
 m_explain.GetWindowText (explain);
 try
 {_ParameterPtr param;
 param.CreateInstance ("ADODB.Parameter");
 param=m_pCommand->CreateParameter ("datetime",adDBTimeStamp,adParamInput,sizeof(datetime2),_variant_t(_bstr_t(datetime2)));
 m_pCommand->Parameters ->Append (param);
 param=m_pCommand->CreateParameter ("name",adVarChar,adParamInput,50,_variant_t(_bstr_t(name)));
 m_pCommand->Parameters ->Append (param);
 param=m_pCommand->CreateParameter ("name2",adVarChar,adParamInput,50,_variant_t(_bstr_t(name2)));
 m_pCommand->Parameters ->Append (param);
 param=m_pCommand->CreateParameter ("ip",adVarChar,adParamInput,50,_variant_t(_bstr_t(ip)));
 m_pCommand->Parameters ->Append (param);
 param=m_pCommand->CreateParameter ("explain",adVarChar,adParamInput,300,_variant_t(_bstr_t(explain)));
 m_pCommand->Parameters ->Append (param);
 m_pCommand->Execute (NULL,NULL,adCmdStoredProc);
 m_pCommand.Detach ();
 m_adodc.Refresh ();
 m_datagrid.Refresh ();
 //AfxMessageBox("Parameter建立成功,存儲過程插入數據庫成功!");
 }
 catch(_com_error ee)///捕捉異常
 {
  CString Error=ee.ErrorMessage ();
  AfxMessageBox("存儲過程插入數據庫失敗!");///顯示錯誤信息
  AfxMessageBox(ee.ErrorMessage ());
 }
 //AfxMessageBox("Parameter建立成功,存儲過程插入數據庫成功!");
}

void CVcadoDlg::Onoutinput()
{
 // TODO: Add your control notification handler code here
 
 FILE *in,*out;
 char ch,ch1,ch2,ch3,ch4;
 int n=1;
 int e=-1;
 /*if (argc!=3)
 {printf("You forgot to enter a filename!\n");
 return 0;
 }*/
 CString edit1,edit2,alltext;
 pedit1->GetWindowText(edit1);
 pedit2->GetWindowText(edit2);
 if((in=fopen(edit1,"r"))==NULL)
 {AfxMessageBox("不能打開日志文件!");
   }
 if((out=fopen(edit2,"w+"))==NULL)
 {AfxMessageBox("不能寫入日志緩沖文件!");
   }
 ch1='"';
 ch2=',';
 //fputc(ch1,out);
 while((ch=fgetc(in))!=EOF)
 {
 if(ch=='\n'&&(ch4=ch3=fgetc(in))==EOF)
 {//fputc(ch1,out);
  fputc('\n',out);
  n=1;
  continue;
 }
 else if(ch=='\n')
 {//fputc(ch1,out);
  fputc('\n',out);
  //fputc(ch1,out);
  fputc(ch4,out);
  n=1;
  continue;
 }
 //printf("\nCurrent position is byte %d\n",ftell(in));
 cout<<"\nCurrent position is byte "<<ftell(in)<<endl;
 if(ch=='.'&&n==1)
 {n=2;
  //fputc(ch1,out);
     fputc(ch2,out);
  //fputc(ch1,out);
  continue;
 }
 if(ch==' ')
 {//fputc(ch1,out);
     fputc(ch2,out);
  //fputc(ch1,out);
  continue;
 }
 putchar(ch);
   fputc(ch,out);
 }
 fclose(in);
 fclose(out);
 AfxMessageBox("日志文件格式轉換成功!");
 if((out=fopen(edit2,"r"))==NULL)
 {AfxMessageBox("不能讀入數據緩沖文件!");
   }
 fseek(out,0,SEEK_SET);
 datetime2="";
 name="";
 name2="";
 ip="";
 explain="";
 int i=0;
 int flag=0;
 int m=0;
 while((ch=fgetc(out))!=EOF)
 {if(ch!='\n')
  {if(ch==',')
   {
      m=m+1;
   i=0;
   continue;
   }
   switch(m)
   {case 0:datetime2.Insert(i++,ch);
      flag=1;
   break;
   case 1:name.Insert(i++,ch);
   flag=1;
   break;
   case 2:name2.Insert(i++,ch);
   flag=1;   
      break;
   case 3:ip.Insert(i++,ch);
   flag=1;   
      break;
   case 4:explain.Insert(i++,ch);
   flag=1;   
      break;
      }
  }
 if(ch=='\n'&&flag==1)
 {//AfxMessageBox(datetime2);
 //AfxMessageBox(name);
 //AfxMessageBox(name2);
 //AfxMessageBox(ip);
 //AfxMessageBox(explain);
 m_datetime2.SetWindowText (datetime2);
 m_name.SetWindowText (name);
 m_name2.SetWindowText (name2);
 m_ip.SetWindowText (ip);
 m_explain.SetWindowText (explain);
 Onspinsert();
 datetime2="";
 name="";
 name2="";
 ip="";
 explain="";
 m=0;
 i=0;
 flag=0;
 }
 }
 
 fclose(out);
 AfxMessageBox("Command建立成功!");
 AfxMessageBox("Parameter建立成功,存儲過程插入數據庫成功!");

posted on 2008-07-02 16:09 isabc 閱讀(616) 評論(0)  編輯 收藏 引用

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频成人| 欧美波霸影院| 女同一区二区| 亚洲人体1000| 亚洲视频观看| 一区二区日韩精品| 欧美日韩成人激情| 亚洲欧美日韩人成在线播放| 亚洲免费高清视频| 国产欧美一区二区视频| 久久久久久久网| 亚洲激情六月丁香| 亚洲人成网站777色婷婷| 午夜精品电影| 欧美伊人久久久久久午夜久久久久| 在线观看福利一区| 一区二区高清| 欧美韩日一区| 欧美亚洲三区| 国产日韩欧美中文在线播放| 欧美一区二区私人影院日本| 久久久久久亚洲精品杨幂换脸| 久久久久久亚洲精品不卡4k岛国| 久久国产精品99国产精| 欧美国产视频一区二区| 国内精品视频一区| 一本一本久久| 精品成人一区二区三区| 99国产精品一区| 久久综合久久综合这里只有精品| 亚洲电影免费在线观看| 亚洲综合社区| 国产日本欧洲亚洲| 亚洲福利视频网| 久久综合色婷婷| 麻豆精品精华液| 在线视频你懂得一区二区三区| 亚洲国产91色在线| 亚洲激情视频网| 久久国产精品第一页| 亚洲欧美日韩国产| 久久精品一区二区三区四区 | 欧美日韩一本到| 亚洲欧美成人在线| 国产日韩精品久久久| 欧美国产日韩精品免费观看| 久久成人综合网| 亚洲欧洲视频| 欧美国产日韩精品免费观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久99久久精品女同性| 欧美一区二区福利在线| 久久九九国产精品| 欧美视频一区二区三区| 国产欧美一级| 久久久视频精品| 久久婷婷国产麻豆91天堂| 国产一区在线播放| 久久久久久国产精品一区| 亚洲一级黄色av| 国产日韩在线看| 久久久久久有精品国产| 久久久久国产成人精品亚洲午夜| 国产日韩欧美夫妻视频在线观看| 久久国产精品黑丝| 久久久一区二区三区| 在线一区亚洲| 欧美在线视频免费| 午夜精品久久一牛影视| 先锋影音久久久| 亚洲国产欧美久久| 亚洲免费综合| 美女爽到呻吟久久久久| 亚洲午夜视频在线| 久久久97精品| 久久国产精品久久精品国产| 欧美激情一区二区三区高清视频 | 欧美日韩一区在线视频| 国内激情久久| 亚洲精品在线观| 99精品国产福利在线观看免费| 欧美亚一区二区| 欧美激情精品久久久六区热门 | 亚洲影视综合| 伊甸园精品99久久久久久| 91久久亚洲| 欧美制服丝袜| 久久久99久久精品女同性| 久久久久欧美精品| 亚洲在线视频一区| 欧美一区免费视频| 亚洲一区二区三区四区视频| 欧美色精品天天在线观看视频 | 噜噜噜久久亚洲精品国产品小说| 美女脱光内衣内裤视频久久影院 | 久久av在线看| 国产伦精品一区二区三区高清版| 亚洲精品一区在线| 国内久久视频| 中文精品一区二区三区 | 在线看国产日韩| 欧美在线视频一区二区| 一区在线影院| 欧美精品18+| 亚洲香蕉视频| 美女诱惑黄网站一区| 一区二区三区高清在线| 亚洲在线免费观看| 国产欧美日韩精品丝袜高跟鞋| 亚洲男女毛片无遮挡| 欧美 亚欧 日韩视频在线| av成人黄色| 国产一区二区你懂的| 欧美激情综合在线| 久久成人久久爱| 亚洲国产视频a| 欧美中文在线免费| 亚洲精品乱码久久久久| 久久国产88| 亚洲精品美女91| 鲁大师成人一区二区三区| 久久亚洲私人国产精品va媚药| 亚洲黄色av一区| 欧美不卡视频| 欧美激情精品久久久| 麻豆国产精品va在线观看不卡| 一区二区三区黄色| 亚洲精品在线免费观看视频| 久久深夜福利| 久久精品人人做人人爽| 亚洲欧美日韩视频一区| 亚洲欧洲中文日韩久久av乱码| 国产欧美一区二区三区在线老狼 | 亚洲国产一区二区三区高清| 尹人成人综合网| 韩国免费一区| 一区二区三区在线观看视频| 亚洲人永久免费| 欧美一区在线直播| 亚洲国产高潮在线观看| 在线亚洲电影| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美日韩国产综合网| 在线观看日韩专区| 欧美一区二区日韩| 日韩一级精品视频在线观看| 久久久久久久一区二区| 国产精品一区免费观看| 亚洲一区二区三区免费在线观看 | 在线亚洲电影| 亚洲区欧美区| 欧美精品在线视频| 亚洲精品无人区| 欧美电影在线免费观看网站| 亚洲欧美日韩精品一区二区| 欧美日韩色婷婷| av成人天堂| 一区二区日韩伦理片| 欧美视频不卡| 夜夜嗨av色综合久久久综合网| 美女主播一区| 欧美精品成人一区二区在线观看| 91久久久国产精品| 亚洲日本一区二区| 国产精品视频精品视频| 亚洲欧美一区二区三区在线| 亚洲自拍偷拍视频| 狠狠综合久久av一区二区老牛| 久久精品国产清高在天天线| 中文在线不卡视频| 亚洲精品美女91| 亚洲精选国产| 国产精品日韩欧美一区| 美女黄网久久| 国产精品自拍在线| 亚洲第一精品夜夜躁人人爽| 欧美日韩亚洲系列| 嫩草国产精品入口| 欧美体内she精视频| 美国成人直播| 国产免费亚洲高清| 亚洲精品一区二区三区婷婷月 | 欧美精品色一区二区三区| 午夜久久99| 欧美精品一区二区三区久久久竹菊| 午夜国产欧美理论在线播放| 欧美高清视频在线观看| 亚洲福利国产| 久久精品三级| 久久视频国产精品免费视频在线| 欧美极品aⅴ影院| 亚洲国产一成人久久精品| 在线不卡免费欧美| 久久精品免费播放| 牛夜精品久久久久久久99黑人 | 日韩视频国产视频| 亚洲欧洲日产国产综合网| 亚洲一区二区成人| 加勒比av一区二区| 日韩一区二区福利|