c数据库导入excel
㈠ 如何将c语言的输出倒入Excel工作表
可以先用C语言格式化输出为EXCEL可以导入的文本文件,再使用EXCEL手工导入。具体导入方法可参阅《往Excel中导入TXT文本数据的三种方法》:http://tech.sina.com.cn/s/2006-05-12/1042934532.shtml
这种方法最简单, 但自动化程度低, 不能集成到你的C程序中去.
如果用C/C++创建EXCEL, 可以使用ADO或者ODBC.
如果用C++/ODBC, 可参阅《直接通过ODBC读写Excel表格文件》:http://www.vckbase.com/document/viewdoc/?id=421
还有《针对Excel表格文件操作的编程实现》:http://www.vckbase.com/document/viewdoc/?id=693
如果你的程序是用C++写的, 推荐使用以上方法.
如果用C/ODBC, 稍微麻烦一点。我以前写过一个,好像是根据一个C++的类改写成C的, 时间太长, 记不得出处了. 现在给你做参考:
三个接口函数:
OpenExcel(): 创建或打开Excel文件的一个工作表
AppendExcel(): 向工作表中加入数据记录
CloseExcel(): 结束处理
main()中示例的是建立test.xls文件, 其中两个工作表. 我这里源程序用VC6.0编译, 得到的结果在Excel 2003中可以使用.
#include <windows.h>
#include <sqlext.h>
#include <stdio.h>
#ifdef _MSC_VER
#pragma comment(lib,"odbc32.lib")
#define SQLLEN SQLINTEGER
#endif
enum errtype { ERRORFREE, ERRACTION, XLSBUSY, TXTBUSY, TXTOPENERROR,
SQLHANDLEENVERROR, SQLSETENVERROR, SQLHANDLEDBCERROR,
SQLCONNECTERROR, SQLALLOCSTMTERROR, SQLCREATEERROR,
SQLSELECTERROR, SQLBINDERROR } ;
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
// ------------------------------------------------------------------------------------------------------------
static void dbError( LPSTR lp, SQLSMALLINT handleType, SQLHANDLE handle)
{
BYTE buf[250], sqlstate[15];
SQLGetDiagRec( handleType,handle, 1, sqlstate, NULL,buf, sizeof(buf),NULL);
fprintf(stderr, "%s: %s SQLSTATE=%s\n",lp, buf, sqlstate);
}
// ------------------------------------------------------------------------------------------------------------
static void dbCleanup()
{
if (hstmt != SQL_NULL_HANDLE) {
SQLFreeStmt(hstmt, SQL_UNBIND);
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
}
if (hdbc != SQL_NULL_HANDLE) {
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
}
if (henv != SQL_NULL_HANDLE) SQLFreeHandle(SQL_HANDLE_ENV,henv);
}
// ------------------------------------------------------------------------------------------------------------
static void dbErrorCleanup( LPSTR lp,SQLSMALLINT handleType, SQLHENV henv,SQLHDBC hdbc,SQLHSTMT hstmt)
{
SQLHANDLE handle;
switch (handleType) {
case SQL_HANDLE_STMT:
handle = hstmt;
break;
case SQL_HANDLE_DBC:
handle = hdbc;
break;
default:
handle = henv;
}
if (handle != SQL_NULL_HANDLE) dbError( lp, handleType, handle );
dbCleanup(henv, hdbc, hstmt );
}
//---------------------------------------------------------
static BOOL isFileOpen(const BYTE *fileName)
{
HANDLE hFile;
// 以非共享方式打开文件. 检查EXCEL文件当前是否在使用中...........
hFile = CreateFile(fileName,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if (hFile == INVALID_HANDLE_VALUE) {
if (GetLastError() == ERROR_SHARING_VIOLATION) return TRUE; // 使用中
else return FALSE; // 未使用中,或者无此文件(现在可以创建)
} else {
CloseHandle(hFile);
return FALSE;
}
}
int OpenExcel(BYTE *szExcelName, BYTE *szSheetName, BYTE *szFieldName[], BYTE *szFieldType[], int nColCount)
{
SQLRETURN retcode;
BYTE szSql[512], *pszSql=szSql;
BYTE szdatabase[256];
int rc, i;
henv = hdbc = hstmt = SQL_NULL_HANDLE;
if ( isFileOpen(szExcelName) ) return XLSBUSY;
// 准备环境 -------------------
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retcode != SQL_SUCCESS) {
dbErrorCleanup( "SQLAllocHandle(ENV)",SQL_HANDLE_ENV,henv,hdbc,hstmt);
return SQLHANDLEENVERROR;
}
retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3,0);
if (retcode != SQL_SUCCESS) {
dbErrorCleanup( "SQLSetEnvAttr()",SQL_HANDLE_ENV,henv,hdbc,hstmt);
return SQLSETENVERROR;
}
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode != SQL_SUCCESS) {
dbErrorCleanup( "SQLAllocHandle(DBC)",SQL_HANDLE_ENV,henv,hdbc,hstmt);
return SQLHANDLEDBCERROR;
}
// 与数据库建立连接 ------------------
sprintf(szdatabase,"DRIVER=Microsoft Excel Driver (*.xls);CREATE_DB=%s;DBQ=%s;READONLY=FALSE;EXCLUSIVE=Yes;",
szExcelName, szExcelName);
//fprintf(stderr, "DATABASE: %s\n", szdatabase);
retcode = SQLDriverConnect(hdbc, NULL, (SQLCHAR *)szdatabase, (short) (strlen(szdatabase)+1), NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) {
dbErrorCleanup( "SQLDriverConnect()",SQL_HANDLE_DBC,henv,hdbc,hstmt);
return SQLCONNECTERROR;
}
retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc, &hstmt);
if (retcode != SQL_SUCCESS) {
dbErrorCleanup( "SQLAllocHandle(STMT)",SQL_HANDLE_DBC,henv,hdbc,hstmt);
return SQLALLOCSTMTERROR;
}
// 构造执行 CREATE TABLE 语句 ----------------------
pszSql = szSql + sprintf(szSql, "CREATE TABLE %s (", szSheetName);
for (i=0; i<nColCount; ++i) {
if (i) *pszSql++ = ',';
pszSql += sprintf(pszSql, "%s %s", szFieldName[i], szFieldType[i]);
}
*pszSql++ = ')';
*pszSql = '\0';
//fprintf(stderr, "STATEMENT: [%s]\n", szSql);
retcode = SQLExecDirect(hstmt, szSql, SQL_NTS);
if (retcode != SQL_SUCCESS) {
SQLCHAR sqlState[15];
SQLGetDiagField( SQL_HANDLE_STMT, hstmt,1,SQL_DIAG_SQLSTATE,sqlState,sizeof(sqlState),NULL);
if ( lstrcmpiA(sqlState,"42S01") != 0 ) { // Already existing...
dbErrorCleanup( " SQLExecDirect()",SQL_HANDLE_STMT,henv,hdbc,hstmt);
return SQLCREATEERROR;
}
}
return 0;
}
int AppendExcel(BYTE *szSheetName, BYTE *szFieldName[], int nColCount, BYTE *szData)
{
int i, rc;
BYTE szSql[512], *s, *p, *d, *psz;
//构造 INSERT INTO 语句 --------------------------------
psz = szSql + sprintf(szSql, "INSERT INTO %s (", szSheetName);
for (i=0; i<nColCount; ++i) {
if (i) *psz++ = ',';
psz += sprintf(psz, "%s", szFieldName[i]);
}
psz += sprintf(psz, ") VALUES (%s)", szData);
//fprintf(stderr, "STATEMENT: %s\n", szSql);
rc = (int) SQLExecDirect(hstmt, szSql, SQL_NTS);
if (rc != SQL_SUCCESS) {
dbError( " SQLExecDirect()",SQL_HANDLE_STMT,hstmt);
}
return rc;
}
void CloseExcel()
{
//fprintf(stderr, "CleanUp: henv=%08X; hdbc=%08X, hstmt=%08X.\n", henv, hdbc, hstmt);
dbCleanup();
}
//------------------ Test data ---------------------------------------
static BYTE szExcelName[] = "Test.xls"; // Excel 文件名
static BYTE szSheetNameA[] = "名单"; // 工作表名
static BYTE *szFieldNameA[] = { "姓名", "年龄" }; // 字段名
static BYTE *szFieldTypeA[] = { "TEXT", "NUMBER" }; // 字段类型
static BYTE szSheetNameB[] = "日程"; // 工作表名
static BYTE *szFieldNameB[] = { "日期", "时间", "安排" }; // 字段名
static BYTE *szFieldTypeB[] = { "TEXT", "TEXT", "TEXT" }; // 字段类型
int main()
{
if (OpenExcel(szExcelName, szSheetNameA, szFieldNameA, szFieldTypeA, 2)==0)
{
AppendExcel(szSheetNameA, szFieldNameA, 2, "'张三',33");
AppendExcel(szSheetNameA, szFieldNameA, 2, "'李四',44");
printf("Excel文件[%s]中的工作表[%s] 操作成功.\n", szExcelName, szSheetNameA);
CloseExcel();
}
if (OpenExcel(szExcelName, szSheetNameB, szFieldNameB, szFieldTypeB, 3)==0)
{
AppendExcel(szSheetNameB, szFieldNameB, 3, "'五月三日','18:00','饭局'");
printf("Excel文件[%s]中的工作表[%s] 操作成功.\n", szExcelName, szSheetNameB);
CloseExcel();
}
printf(" ----- 完了.");
return 0;
}
---------------------------------------
有关函数的调用参数:
int OpenExcel( //成功:返回0
BYTE *szExcelName, //Excel文件名
BYTE *szSheetName, //工作表名
BYTE *szFieldName[], //字段名(数组)
BYTE *szFieldType[], //字段类型(数组)
int nColCount) //字段数
int AppendExcel( //成功:返回0
BYTE *szSheetName, //工作表名
BYTE *szFieldName[], //字段名(数组)
int nColCount, //字段数
BYTE *szData) //数据字串
如使用图形界面,可把#include <stdio.h> 去掉, printf/fprintf 改为用 MessageBox 提供必要的输出信息或干脆删掉。
㈡ C# 如何将EXCEL插入到数据库
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Data;
usingSystem.Collections;
usingSystem.Windows.Forms;
usingSystem.Data.OleDb;
usingSystem.Data.Common;
usingSystem.Data.SqlClient;
publicpartialclassExcel导入_Default:System.Web.UI.Page
{
privatestaticstringfilename;
privatestaticstringsavePath;
privatestaticDataSetds;//要插入的数据
privatestaticDataTabledt;
protectedvoidPage_Load(objectsender,EventArgse)
{
}
//上传文件到指定的服务器
protectedvoidButton1_Click1(objectsender,EventArgse)
{
filename=this.fileUploadExcel.FileName;
//savePath必须包含表名在内的所有路径名
savePath=@"G:项目组文件项目.net学习资料工程HealthExcel导入Files"+this.fileUploadExcel.FileName;//上传服务器文件的存储,存在当前新建的文件夹
this.fileUploadExcel.SaveAs(savePath);
Booleanjudge_excel=Judge_Excel();
if(!judge_excel)
{
MessageBox.Show("上传的不是excel文件","标题",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);
return;
}
else
MessageBox.Show("上传文件成功","标题",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
//测试,将excel中的sheet1导入到sqlserver中
//stringconnString="server=localhost;uid=sa;pwd=sqlgis;database=master";
//System.Windows.Forms.OpenFileDialogfd=newOpenFileDialog();
//if(fd.ShowDialog()==DialogResult.OK)
//{
////TransferData(fd.FileName,"sheet1",connString);
//}
}
//判断文件是否是excel文件函数
protectedBooleanJudge_Excel()
{
stringfileExtend=System.IO.Path.GetExtension(this.fileUploadExcel.FileName);
if(fileExtend==".xlsx"||fileExtend==".xls")
returntrue;
else
returnfalse;
}
//获取excel数据按钮的触发,
protectedvoidButton2_Click(objectsender,EventArgse)
{
ExcelToDataSet();
MessageBox.Show("获取数据成功","标题",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
}
//从excel表中获取数据的函数
publicvoidExcelToDataSet()
{
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+savePath+";ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"";
OleDbConnectionconn=newOleDbConnection(strConn);//连接excel
if(conn.State.ToString()=="Open")
{
conn.Close();
}
conn.Open();//外部表不是预期格式,不兼容2010的excel表结构
strings=conn.State.ToString();
OleDbDataAdaptermyCommand=null;
ds=null;
/*DataTableyTable=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,newObject[]{null,null,null,"TABLE"});//获取表的框架,几行几列
stringtableName=yTable.Rows[0]["filename"].ToString();//表示的是几行几列
stringstrSel="select*from["+filename+"]";//xls*/
stringstrExcel="select*from[sheet1$]";//如果有多个sheet表时可以选择是第几张sheet表
myCommand=newOleDbDataAdapter(strExcel,conn);//用strExcel初始化myCommand,查看myCommand里面的表的数据??
ds=newDataSet();
myCommand.Fill(ds);//把表中的数据存放在ds(dataSet)
conn.Close();
try
{
dt=ds.Tables[0];
this.dataGridView1.DataSource=dt;
}
catch(Exceptionerr)
{
MessageBox.Show("操作失败!"+err.ToString());
}
}
//excel导入数据库sql的按钮触发
protectedvoidButton3_Click(objectsender,EventArgse)
{
//stringpath=@"D:数据库SQLServerMSSQL10_50.MSSQLSERVERMSSQLDATATest.mdf";
stringconnString="server=localhost;uid=sa;pwd=1234;database=Test";//连接数据库的路径方法
//StringconnString=@"server=localhost;uid=sa;pwd=1234;database=D:数据库SQLServerMSSQL10_50.MSSQLSERVERMSSQLDATATest.mdf";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
DataRowdr=null;
intC_Count=dt.Columns.Count;//获取列数
for(inti=0;i<dt.Rows.Count;i++)//记录表中的行数,循环插入
{
dr=dt.Rows[i];
insertToSql(dr,C_Count,conn);
}
conn.Close();
if(dataGridView1.Rows.Count>0)//把数据库表中的数据显示到表中,可判断有没有数据
{
MessageBox.Show("导入成功!");
}
else
{
MessageBox.Show("没有数据!");
}
}
//使用bcp,不容易出错而且效率高
/*try
{
using(System.Data.SqlClient.SqlBulkCopybcp=newSystem.Data.SqlClient.SqlBulkCopy(connString))
{
bcp.SqlRowsCopied+=newSystem.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize=100;//每次传输的行数
bcp.NotifyAfter=100;//进度提示的行数
bcp.DestinationTableName=savePath;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}*/
//插入数据库的函数
protectedvoidinsertToSql(DataRowdr,intcolumn_count,SqlConnectionconn)
{
//excel表中的列名和数据库中的列名一定要对应
stringname=dr[0].ToString();//需要把内个列都列出来
stringage=dr[1].ToString();
stringsex=dr[2].ToString();
//当数据库中有多个表时,怎么分辨插入的表
stringsql="insertinto客户values('"+name+"','"+age+"','"+sex+"')";
SqlCommandcmd=newSqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
//从excel表中获取数据并存在
//protectedvoidImportFromExcel()
//{
//stringexecelConnectionStr=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=filename;
//ExtendedProperties=""Excel8.0;HDR=YES;IMEX=1""";//表第一行是标题,不做为数据使用,Excel档案只能用来做“读取”用途。
//ds=newDataSet();
//stringconnString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
//+savePath+";ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"";
//DataTabletable=OleDbHelper.GetExcelTables(connString);
//if(table==null||table.Rows.Count<=0)
//{
//return;
//}
//foreach(DataRowdrintable.Rows)
//{
//stringcmdText="select*from["+dr["TABLE_NAME"].ToString()+"]";
//DataTabledt=OleDbHelper.FillDataTable(connString,cmdText);
//dt.TableName=dr["TABLE_NAME"].ToString();
//ds.Tables.Add(dt);
//}
//}
}
㈢ c语言 excel导入导出
C++、VC、VS、.net里都可通过数据库连接、捆绑后再调用,前提是你安装了相应版本的excel服务包(一般安装Office时都会自动装好,只是版本别选错,没有安装的,自己找找吧)。
用标准C语言很难,因为excel的格式不固定,要检测的东西很多,不建议用标C。
㈣ 如何导入excel并存入数据库
1.使用php
Excel
Parser
Pro软件,但是这个软件为收费软件;
2.可将EXCEL表保存为CSV格式,然后通过phpmyadmin或者SQLyog导入,SQLyog导入的方法为:
·将EXCEL表另存为CSV形式;
·打开SQLyog,对要导入的表格右击,点击“导入”-“导入使用加载本地CSV数据”;
·在弹出的对话框中,点击“改变..”,把选择“填写excel友好值”,点击确定;
·在“从文件导入”中选择要导入的CSV文件路径,点击“导入”即可导入数据到表上;
3.一个比较笨的手工方法,就是先利用excel生成sql语句,然后再到mysql中运行,这种方法适用于excel表格导入到各类sql数据库:
·假设你的表格有A、B、C三列数据,希望导入到你的数据库中表格tablename,对应的字段分别是col1、col2、col3
·在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:
1)增加一列(假设是D列)
2)在第一行的D列,就是D1中输入公式:
=CONCATENATE("insert
into
tablename
(col1,col2,col3)
values
(",A1,",",B1,",",C1,");")
3)此时D1已经生成了如下的sql语句:
insert
into
table
(col1,col2,col3)
values
('a','11','33');
4)将D1的公式复制到所有行的D列(就是用鼠标点住D1单元格的右下角一直拖拽下去啦)
5)此时D列已经生成了所有的sql语句
6)把D列复制到一个纯文本文件中,假设为sql.txt
·把sql.txt放到数据库中运行即可,你可以用命令行导入,也可以用phpadmin运行。