把EXECL读到SQL2000问题(50分)

  • 主题发起人 主题发起人 yunxi126
  • 开始时间 开始时间
Y

yunxi126

Unregistered / Unconfirmed
GUEST, unregistred user!
你有没有把EXECL数据读到sql2000里面来的代码。
在SQL编辑器里写的那种。
 
转贴:
先讀取EXCEL中的數據
private void btnView_Click(object sender, System.EventArgs e)
{
dgExcelData.DataSource = null;
FileDialog dlgOpen = new OpenFileDialog();
dlgOpen.Filter="Excel Files (*.xls)|*.xls";
if(dlgOpen.ShowDialog() == DialogResult.OK)
{
txtPath.Text=dlgOpen.FileName;
string strCon = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = "+txtPath.Text.Trim()+";Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection();
try
{
this.Cursor = Cursors.WaitCursor;

//創建一個數據Excel連接******************************************************************
myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM [Sheet1$]" ;
myConn.Open ();
//打開連接得到數據集合
oDS.Clear();
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
myCommand.Fill ( oDS , "[Sheet1$]" ) ;
//關閉連接
myConn.Close ( ) ;

if (!oDS.Tables[0].Columns.Contains("Insert Result"))
oDS.Tables[0].Columns.Add("Insert Result");

dgExcelData.SetDataBinding(oDS,"[Sheet1$]");


btnOk.Enabled = true;
this.Cursor = Cursors.Arrow;
inifrom();
}
catch(Exception err1)
{
MessageBox.Show(err1.Message);
myConn.Close();
this.Cursor = Cursors.Arrow;
}
}//END
}
上传至数据库下面上传的是oracle的,你将连接字串改一下就可以了,还是里面的sql语句也要改哦!
private void btnOk_Click(object sender, System.EventArgs e)
{
int nRowCount = oDS.Tables[0].Rows.Count;
int nCountPass = 0;
int nCountFail = 0;
string sql = "";
string sCon = "Provider=MSDAORA;Data Source=kssfis;User Id=mes_ks1;Password=mes_ks1;";
OleDbConnection cn = new OleDbConnection(sCon);
cn.Open();
OleDbCommand cmd = new OleDbCommand();
OleDbTransaction Tran = cn.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = Tran;
//Tran.Begin();
for(int i =0;i<nRowCount;i++)
{
try
{
sql = "insert into bwc.erp_temp( part_no, erp_qty)";
sql += " values('"+oDS.Tables[0].Rows[0].ToString().Trim()+"',"+oDS.Tables[0].Rows[1].ToString().Trim()+")";
cmd.Connection = cn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
nCountPass++;
oDS.Tables[0].Rows.Delete();
this.Text="[ PASS:"+nCountPass+" ] [ FAIL:"+nCountFail+" ]";
}
catch(Exception ex)
{
oDS.Tables[0].Rows[4] = ex.Message;
nCountFail++;
this.Text="[ PASS:"+nCountPass+" ] [ FAIL:"+nCountFail+" ]";
}

prebar.Value = i;

}

cmd.Transaction.Commit();

企业管理器里直接导入Excel表格
 
对了,如果你不是要编程实现,要用代码的话,可以:
下列代码将 Excel 链接服务器“EXCELLINK”上的 Customers 工作表数据导入新的名为 XLImport1 的 SQL Server 表: SELECT * INTO XLImport1 FROM EXCELLINK...[Customers$]

还可以通过按照以下方式使用 OPENQUERY 以全通过方式对源数据执行查询: SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,
'SELECT * FROM [Customers$]')
剩下的就简单了。
SELECT * FROM OPENROWSET ..........
OPENROWSET 也可以直接对excel操作,sql的帮助讲的很明白,看一下帮助。
1、向Excel查询

select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:/book1.xls;','select * from [Sheet1$]') where c like '%f%'

select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:/book1.xls',[sheet1$])

1)hdr=yes时可以把xls的第1行作为字段看待,如第1个中hdr=no的话,where时就会报错
2)[]和美圆$必须要,否则M$可不认这个账

2、修改Execl

update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:/book1.xls;','select * from [Sheet1$]')
set a='erquan' where c like '%f%'

3、导入导出


insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:/book1.xls;','select * from [Sheet2$]')(id,name)
select id,name from serv_user

或BCP

master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:/book2.xls" -c -q -S"." -U"sa" -P"sa"'

从Excel向SQLServer导入:

select * into serv_user_bak
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:/book1.xls;','select * from [Sheet1$]')

如果表serv_user_bak不存在,则创建
这些都是从帮助里拷贝出来地,
 
select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=d:/abc.xls;','select * from [Sheet1$]')

服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。
 
我的是offic 2003
 
我不是要实现编程。。
我要的是你下面那个代码。 可以调试的时候错误了。 你知道什么原因吗。
 
无语.......................
97~2003应该都是一样的
我试验一下
 
可以了。 放分
 
后退
顶部