sql server数据库中有表a,字段有“代号”、“姓名”、“科目”、“成绩”。“代号”是自动生成的
某磁盘下有名为b的Excel文件,其内容是:
代号 姓名 科目 成绩
101 张三 数据库 80
102 李四 C语言 78
103 王五 vb.net 85
如何在web窗体中单击某按钮,如“导入”,使b中的数据导入到a中???
Excel文件在客户端,点击“导入”后应先搜索查找到该文件,然后确定后在插入到数据库中。
请问这种功能怎么实现,初学请说的详细一些。
某磁盘下有名为b的Excel文件,其内容是:
代号 姓名 科目 成绩
101 张三 数据库 80
102 李四 C语言 78
103 王五 vb.net 85
如何在web窗体中单击某按钮,如“导入”,使b中的数据导入到a中???
Excel文件在客户端,点击“导入”后应先搜索查找到该文件,然后确定后在插入到数据库中。
请问这种功能怎么实现,初学请说的详细一些。
解决方案 »
- StringBuilder 拼接 对防止sql注入有帮助么?
- .net实现注册的时候检查用户名和邮箱是否已存在!
- 如何得到sqldbcommand生成的实际SQL?
- GridView中CheckBox控件选择的问题
- 免费空间:支持ASP.NET的极速空间
- 小心的问一下
- 能否判断一个中文字符的拼音的首个字母?
- 地址栏中的参数如何加密解密啊
- 这里有没有朋友在用开源CMS的 (Community Server)
- asp页面和aspx页面不在同一个虚拟目录下,可否互相存取cookie
- 【200分】请大家继续帮助讨论ASP.NET用户权限认证授权问题
- w3wp.exe 进程占用50%,甚至于100% CPU资源,服务器2个CPU
然后 select 到 DataTable 然后循环插入 SQL数据库http://www.connectionstrings.com/?carrier=excel
-----
1.把excel文件上传server端
2.读取上传的excel文件(当作数据源来读取就可以了),可以读取到dataset中
3.循环读取dataset中记录,插入database 中
能明示。
string filepath = FileUpload1.FileName;
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
" Data Source=" + filepath.Replace(@"\",@"\\") + ";" +
" Extended Properties=Excel 8.0;";
这样得到的只是文件名,它的路径没有,Data Source不正确。
protected void btnInport_Click(object sender, EventArgs e)
{
string filepath = FileUpload1.FileName;
string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
if (filename.Substring(filename.LastIndexOf(".") + 1)!= "xlsx") { Response .Write ("请选择正确的文件"); return; }
SqlConnection sc = new SqlConnection( ConfigurationManager.ConnectionStrings[1].ConnectionString ); try { sc.Open(); string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
" Data Source=" + filepath.Replace(@"\", @"\\") + ";" + //"D:\\简历\\Achievement.xlsx" " Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM fff", conn); myCommand.SelectCommand.Prepare(); DataSet myDataSet = new DataSet(); myCommand.Fill(myDataSet);
conn.Dispose(); myCommand.Dispose();
int c = myDataSet.Tables[0].Rows.Count; if (c == 0) { Response .Write ("没有满足条件的记录"); return; } for(int i = 0;i < c; i++) { SqlCommand cmm = new SqlCommand ( " INSERT INTO Achievement (EmpID,Score,Times,Res,Signal)" + " VALUES ( " +
"" + myDataSet.Tables[0].Rows[i]["员工ID"].ToString() + ", " +
"" + myDataSet.Tables[0].Rows[i]["成绩"].ToString() + ", " +
"" + myDataSet.Tables[0].Rows[i]["评定期间"].ToString() + ", " +" 1)"
,sc
);
cmm.ExecuteNonQuery();
cmm = new SqlCommand (
"select @@identity from Achievement"
,sc
);
object newid = cmm.ExecuteScalar(); cmm.Dispose(); }
Response .Write ("成功导入!"); return;
}
catch(Exception ex)
{ Response .Write (ex.ToString()); return;
}
finally { if (sc.State == System.Data.ConnectionState.Open) sc.Close(); }
}
大家请帮我改改
提示
System.Data.OleDb.OleDbException: 外部表不是预期的格式。 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.OleDb.OleDbConnection.Open() 在 Adapter_Default.btnInport_Click(Object sender, EventArgs e) 位置 c:\Documents and Settings\Administrator\桌面\NewWet\Default2.aspx.cs:行号 88 另外ASP.NET中有没有OpenDialog这个控件?
然后用insert into 语句将数据插入数据库中。
但是这样只能对数据较少的表还可以,一旦表中的字段比较多,那么执行会非常慢。也可以先将数据记录在Xml文件中,在插入数据库中。
Server.MapPath("ExcelTemp") + @"\" +
FileUpload1.FileName + ";Extended Properties=Excel 8.0;";
我写的话对么?“ExcelTemp”是可以任意写的么?
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
FileUpload1.PostedFile.FileName + ";Extended Properties=Excel 8.0;";
但执行到conn.Open();时提示System.Data.OleDb.OleDbException: 外部表不是预期的格式。这该怎么改。
这个是指office 2003及以下的格式.
如果是office2007格式,请不要使用.这是execl 2007格式的.
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0;HDR=YES";
以下是我的最新代码:
string filepath = FileUpload1.FileName;
string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
if (filename.Substring(filename.LastIndexOf(".") + 1) != "xlsx")
{ Response.Write("请选择正确的文件"); return; }
SqlConnection sc = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ConnectionString); try
{ sc.Open(); string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
FileUpload1.PostedFile.FileName + ";Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn); myCommand.SelectCommand.Prepare();
DataSet myDataSet = new DataSet(); myCommand.Fill(myDataSet, "ExcelTemp");
conn.Dispose(); myCommand.Dispose();
int c = myDataSet.Tables[0].Rows.Count; if (c == 0)
{ Response.Write("没有满足条件的记录"); return; } for (int i = 0; i < c; i++)
{ SqlCommand cmm = new SqlCommand(" INSERT INTO Achievement (EmpID,Score,Times,Res,Signal)" + " VALUES ( " +
"" + myDataSet.Tables[0].Rows[i]["EmpID"].ToString() + ", " +
"" + myDataSet.Tables[0].Rows[i]["Score"].ToString() + ", " +
"" + myDataSet.Tables[0].Rows[i]["Times"].ToString() + ", " +
""+myDataSet .Tables [0].Rows [i]["Res"].ToString()+","+ " 1)"
, sc
);
cmm.ExecuteNonQuery(); //但执行到此处时出现“'年第三季度' 附近有语法错误。”
cmm = new SqlCommand(
"select @@identity from Achievement"
, sc
);
object newid = cmm.ExecuteScalar(); cmm.Dispose(); }
Response.Write("成功导入!"); return;
}
catch (Exception ex)
{ Response.Write(ex.ToString()); return;
}
finally
{ if (sc.State == System.Data.ConnectionState.Open) sc.Close(); }
以下是Excel表中的内容:
EmpID Score Times Res
3 69 2005年第三季度 无
5 78 2005年第三季度 无
7 98 2005年第三季度 再接再厉
数据库中字段属性分别为:int,int,nvarchar(50),ntext;不知又是哪里错了?
唉,放出了150,最后居然自己解决了。
高兴啊。