1.通过开启Ad Hoc Distributed Queries导入数据
默认下是关闭的,所以导入前需要开启
启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
使用完成后,关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
然后使用以下代码作为导入
select * INTO test05091
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;IMEX=1;database=c:\001.xls;','select * from [Sheet1$]')
from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;IMEX=1;database=c:\001.xls;','select * from [Sheet1$]')
代码中,在连接字符串的“Extended Properties”部分设置“IMEX=1”,启用导入模式。这将强制使用ImportMixedTypes=Text 注册表设置。但在此模式下,执行更新操作时可能会出现意外的结果。但是,能够有效的解决数字文本混合列的导入出现“NULL”值的问题。
注:
混用数据类型时应注意的事项如上所述,ADO必须猜测Excel工作表或范围中各列的数据类型。(这不受Excel单元格格式设置的影响。)如果同一列中既有数字值,也有文本值,会出现严重的问题。Jet和ODBC 提供程序将返回占多数的类型的数据,但对于占少数的数据类型,则会返回NULL(空)值。如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
再c#中的应用
protected void Button3_Click(object sender, EventArgs e)
{
if (FileUpload1.PostedFile != null)
{
string str = FileUpload1.PostedFile.FileName;
int i = str.LastIndexOf("\\");//取得文件名中最后一个"."的索引
String filename = str.Substring(i + 1); //获取文件扩展名
//FileUpload1.PostedFile.SaveAs(Server.MapPath("xls") + "\\" + filename);/* 两种方法都可以 */
FileUpload1.PostedFile.SaveAs(Server.MapPath("xls") + @"\" + filename);
Label1.Text = "文件名为" + filename;
SqlConnection conn = new SqlConnection(strConnection);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * INTO test05091 from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;IMEX=1;database=" + Server.MapPath("xls") + "\\" + filename + ";','select * from [Sheet1$]')";
conn.Open();
cmd.ExecuteNonQuery();
Response.Write("导入");
conn.Close();
}
}
{
if (FileUpload1.PostedFile != null)
{
string str = FileUpload1.PostedFile.FileName;
int i = str.LastIndexOf("\\");//取得文件名中最后一个"."的索引
String filename = str.Substring(i + 1); //获取文件扩展名
//FileUpload1.PostedFile.SaveAs(Server.MapPath("xls") + "\\" + filename);/* 两种方法都可以 */
FileUpload1.PostedFile.SaveAs(Server.MapPath("xls") + @"\" + filename);
Label1.Text = "文件名为" + filename;
SqlConnection conn = new SqlConnection(strConnection);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * INTO test05091 from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;IMEX=1;database=" + Server.MapPath("xls") + "\\" + filename + ";','select * from [Sheet1$]')";
conn.Open();
cmd.ExecuteNonQuery();
Response.Write("导入");
conn.Close();
}
}
注意,这里的插入一定要给足权限!