25 个解决方案
#1
如果对效率,调度要求比较高可以使用sqlserver的dts,以windows service的方式运行,与前台交互可以使用remoting注册tcp/ip通道(同局域网内部署),关于.net的dts开发,可以参考
http://www.programfan.com/article/showarticle.asp?id=2712
http://www.programfan.com/article/showarticle.asp?id=2712
#2
帮你顶上去!!
#3
前台分页显示吧
#4
mark
#5
其实我不显示也可以,我只是要把这些数据倒成EXCEL就可以了,但数据库不在局域网内
#6
帮你顶,让高手来捧场
#7
但数据库不在局域网内
----------------------------
是否有防火墙?如果有的话就比较复杂了,如果通过internet可以直接访问到,那么dts的使用和本地sqlserver也应该没有区别
----------------------------
是否有防火墙?如果有的话就比较复杂了,如果通过internet可以直接访问到,那么dts的使用和本地sqlserver也应该没有区别
#8
3W没关系啊,直接在EXCEL里面加入数据都可以
#9
你的3W是什么意思?是3万多条数据是吗?先把数据查询出来插入到临时表中,然后从临时表中做查询,肯定比你直接查库要快至少5倍以上!!!
#10
楼主可以先将数据用DATAGRIDVIEW在前台显示,然后再将DATAGRIDVIEW(或DATASET)的数据导入到EXCEL里,请参考下面的代码,这代码也不是我写的,楼主主要看如何用myData数组来获取与填充就行了
/**//// <summary>
/// DataGridView导出到Excel
/// 操作步骤:
/// 1)先添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0
/// (不同的office讲会有不同版本的dll文件).
/// 2)引入using Microsoft.Office.Interop.Excel;和using System.Reflection;
///
/// </summary>
/// <param name="dgv"></param>
public void DBtoExcel(DataGridView dgv)
{
int rowCount = dgv.RowCount;
int columnCount = dgv.ColumnCount;
//
Microsoft.Office.Interop.Excel.Application exc = new Microsoft.Office.Interop.Excel.Application();
if (exc == null)
{
throw new Exception("Excel无法启动");
}
//
exc.Visible = true;
//
Workbooks workbooks = exc.Workbooks;
//
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//
Sheets sheets = exc.Sheets;
_Worksheet worksheet = (_Worksheet)sheets[1];
if (worksheet == null)
{
throw new Exception("Worksheet error");
}
//
Range r = worksheet.get_Range("A1", Missing.Value);
if (r == null)
{
MessageBox.Show("Range无法启动");
throw new Exception("Range error");
}
//以上是一些例行的初始化工作,下面进行具体的信息填充
//填充标题
int ColIndex = 1;
foreach (DataGridViewColumn dHeader in dgv.Columns)
{
worksheet.Cells[1, ColIndex++] = dHeader.HeaderText;
}
//获取DataGridView中的所有行和列的数值,填充到一个二维数组中.
object[,] myData = new object[rowCount + 1, columnCount];
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
myData[i, j] = dgv[j,i].Value; //这里的获取注意行列次序
}
}
//将填充好的二维数组填充到Excel对象中.
r = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 1, columnCount]);
r.Value2 = myData;
}
/**//// <summary>
/// 导出GridView到Excel中的关键之处
/// 用法: ToExcel(GVStaff, TextBox1.Text);
/// </summary>
/// <param name="ctl"></param>
/// <param name="FileName"></param>
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
/**//// <summary>
/// DataGridView导出到Excel
/// 操作步骤:
/// 1)先添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0
/// (不同的office讲会有不同版本的dll文件).
/// 2)引入using Microsoft.Office.Interop.Excel;和using System.Reflection;
///
/// </summary>
/// <param name="dgv"></param>
public void DBtoExcel(DataGridView dgv)
{
int rowCount = dgv.RowCount;
int columnCount = dgv.ColumnCount;
//
Microsoft.Office.Interop.Excel.Application exc = new Microsoft.Office.Interop.Excel.Application();
if (exc == null)
{
throw new Exception("Excel无法启动");
}
//
exc.Visible = true;
//
Workbooks workbooks = exc.Workbooks;
//
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//
Sheets sheets = exc.Sheets;
_Worksheet worksheet = (_Worksheet)sheets[1];
if (worksheet == null)
{
throw new Exception("Worksheet error");
}
//
Range r = worksheet.get_Range("A1", Missing.Value);
if (r == null)
{
MessageBox.Show("Range无法启动");
throw new Exception("Range error");
}
//以上是一些例行的初始化工作,下面进行具体的信息填充
//填充标题
int ColIndex = 1;
foreach (DataGridViewColumn dHeader in dgv.Columns)
{
worksheet.Cells[1, ColIndex++] = dHeader.HeaderText;
}
//获取DataGridView中的所有行和列的数值,填充到一个二维数组中.
object[,] myData = new object[rowCount + 1, columnCount];
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
myData[i, j] = dgv[j,i].Value; //这里的获取注意行列次序
}
}
//将填充好的二维数组填充到Excel对象中.
r = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 1, columnCount]);
r.Value2 = myData;
}
/**//// <summary>
/// 导出GridView到Excel中的关键之处
/// 用法: ToExcel(GVStaff, TextBox1.Text);
/// </summary>
/// <param name="ctl"></param>
/// <param name="FileName"></param>
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
#11
效率不差,曾导过5万条的记录,也就10秒左右的样子
#12
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
里面没有代码??
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
里面没有代码??
#13
up
#14
虽然数据3W不是很大,但我这3W条是通过三个大数据量的表查询出来的数据(查询的时间占了1-2分钟,这个时间没有办法改变的),dts的使用我倒没有去试过,等下就去试一下.jcyluck的方法可能不大适合我,我只是想把大数据量转成EXCEL,并不需要显示的。希望高手继续给好的建议
#15
在数据库直接手工操作export data
#16
我这3W条是通过三个大数据量的表查询出来的数据
----------------------------
那你先把查询结果放另一个表然后直接倒出Excel
----------------------------
那你先把查询结果放另一个表然后直接倒出Excel
#17
对于导数据,你看看应该有专门的工具...
以前做过Oracle将文本文件导入数据库,用的是Oracle的sqlloader,当时是写成的一个批处理,然后在程序中调就行了,速度特别快...速度大约相当于在程序中解析字符串,然后插入数据库这种做法的25倍左右(做过实验)...
对于从数据库中往外面导,我想也应该有相应的工具吧...如果真有的话,不妨也写成批处理,然后在程序中调用即可...
仅供参考..
以前做过Oracle将文本文件导入数据库,用的是Oracle的sqlloader,当时是写成的一个批处理,然后在程序中调就行了,速度特别快...速度大约相当于在程序中解析字符串,然后插入数据库这种做法的25倍左右(做过实验)...
对于从数据库中往外面导,我想也应该有相应的工具吧...如果真有的话,不妨也写成批处理,然后在程序中调用即可...
仅供参考..
#18
顺便问一下,你用的是什么数据库?
#19
3W条数据,如果前台查看,使用分页显示(一次只取几页的数据即可)。
如果要导出,有几种选择:
1。在服务器上导出到excel,然后把excel下载到客户端来
2。将数据放到DataSet里返回到客户端,然后手动来写excel
个人觉得,1。是个不错的选择。
如果要导出,有几种选择:
1。在服务器上导出到excel,然后把excel下载到客户端来
2。将数据放到DataSet里返回到客户端,然后手动来写excel
个人觉得,1。是个不错的选择。
#20
这里有篇文章说的是从数据库导入excel,8000条只需要4秒钟...
不知道对你有没有帮助...
http://sh.szstudy.cn/showArticle/26700.shtml
不知道对你有没有帮助...
http://sh.szstudy.cn/showArticle/26700.shtml
#21
or try...
http://www.cnblogs.com/forrest_lu/archive/2004/04/21/6966.aspx
方法挺简单,不知道效率如何...
http://www.cnblogs.com/forrest_lu/archive/2004/04/21/6966.aspx
方法挺简单,不知道效率如何...
#22
太感谢liujia_0421了!!!!!
#23
来学习下 顺便帮LZ顶了
#24
3w .
我以前都导过80万的数据.
时间用了好象是十几分钟吧.
如果想要代码:QQ:84115357
我以前都导过80万的数据.
时间用了好象是十几分钟吧.
如果想要代码:QQ:84115357
#25
#1
如果对效率,调度要求比较高可以使用sqlserver的dts,以windows service的方式运行,与前台交互可以使用remoting注册tcp/ip通道(同局域网内部署),关于.net的dts开发,可以参考
http://www.programfan.com/article/showarticle.asp?id=2712
http://www.programfan.com/article/showarticle.asp?id=2712
#2
帮你顶上去!!
#3
前台分页显示吧
#4
mark
#5
其实我不显示也可以,我只是要把这些数据倒成EXCEL就可以了,但数据库不在局域网内
#6
帮你顶,让高手来捧场
#7
但数据库不在局域网内
----------------------------
是否有防火墙?如果有的话就比较复杂了,如果通过internet可以直接访问到,那么dts的使用和本地sqlserver也应该没有区别
----------------------------
是否有防火墙?如果有的话就比较复杂了,如果通过internet可以直接访问到,那么dts的使用和本地sqlserver也应该没有区别
#8
3W没关系啊,直接在EXCEL里面加入数据都可以
#9
你的3W是什么意思?是3万多条数据是吗?先把数据查询出来插入到临时表中,然后从临时表中做查询,肯定比你直接查库要快至少5倍以上!!!
#10
楼主可以先将数据用DATAGRIDVIEW在前台显示,然后再将DATAGRIDVIEW(或DATASET)的数据导入到EXCEL里,请参考下面的代码,这代码也不是我写的,楼主主要看如何用myData数组来获取与填充就行了
/**//// <summary>
/// DataGridView导出到Excel
/// 操作步骤:
/// 1)先添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0
/// (不同的office讲会有不同版本的dll文件).
/// 2)引入using Microsoft.Office.Interop.Excel;和using System.Reflection;
///
/// </summary>
/// <param name="dgv"></param>
public void DBtoExcel(DataGridView dgv)
{
int rowCount = dgv.RowCount;
int columnCount = dgv.ColumnCount;
//
Microsoft.Office.Interop.Excel.Application exc = new Microsoft.Office.Interop.Excel.Application();
if (exc == null)
{
throw new Exception("Excel无法启动");
}
//
exc.Visible = true;
//
Workbooks workbooks = exc.Workbooks;
//
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//
Sheets sheets = exc.Sheets;
_Worksheet worksheet = (_Worksheet)sheets[1];
if (worksheet == null)
{
throw new Exception("Worksheet error");
}
//
Range r = worksheet.get_Range("A1", Missing.Value);
if (r == null)
{
MessageBox.Show("Range无法启动");
throw new Exception("Range error");
}
//以上是一些例行的初始化工作,下面进行具体的信息填充
//填充标题
int ColIndex = 1;
foreach (DataGridViewColumn dHeader in dgv.Columns)
{
worksheet.Cells[1, ColIndex++] = dHeader.HeaderText;
}
//获取DataGridView中的所有行和列的数值,填充到一个二维数组中.
object[,] myData = new object[rowCount + 1, columnCount];
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
myData[i, j] = dgv[j,i].Value; //这里的获取注意行列次序
}
}
//将填充好的二维数组填充到Excel对象中.
r = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 1, columnCount]);
r.Value2 = myData;
}
/**//// <summary>
/// 导出GridView到Excel中的关键之处
/// 用法: ToExcel(GVStaff, TextBox1.Text);
/// </summary>
/// <param name="ctl"></param>
/// <param name="FileName"></param>
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
/**//// <summary>
/// DataGridView导出到Excel
/// 操作步骤:
/// 1)先添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0
/// (不同的office讲会有不同版本的dll文件).
/// 2)引入using Microsoft.Office.Interop.Excel;和using System.Reflection;
///
/// </summary>
/// <param name="dgv"></param>
public void DBtoExcel(DataGridView dgv)
{
int rowCount = dgv.RowCount;
int columnCount = dgv.ColumnCount;
//
Microsoft.Office.Interop.Excel.Application exc = new Microsoft.Office.Interop.Excel.Application();
if (exc == null)
{
throw new Exception("Excel无法启动");
}
//
exc.Visible = true;
//
Workbooks workbooks = exc.Workbooks;
//
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
//
Sheets sheets = exc.Sheets;
_Worksheet worksheet = (_Worksheet)sheets[1];
if (worksheet == null)
{
throw new Exception("Worksheet error");
}
//
Range r = worksheet.get_Range("A1", Missing.Value);
if (r == null)
{
MessageBox.Show("Range无法启动");
throw new Exception("Range error");
}
//以上是一些例行的初始化工作,下面进行具体的信息填充
//填充标题
int ColIndex = 1;
foreach (DataGridViewColumn dHeader in dgv.Columns)
{
worksheet.Cells[1, ColIndex++] = dHeader.HeaderText;
}
//获取DataGridView中的所有行和列的数值,填充到一个二维数组中.
object[,] myData = new object[rowCount + 1, columnCount];
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < columnCount; j++)
{
myData[i, j] = dgv[j,i].Value; //这里的获取注意行列次序
}
}
//将填充好的二维数组填充到Excel对象中.
r = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[rowCount + 1, columnCount]);
r.Value2 = myData;
}
/**//// <summary>
/// 导出GridView到Excel中的关键之处
/// 用法: ToExcel(GVStaff, TextBox1.Text);
/// </summary>
/// <param name="ctl"></param>
/// <param name="FileName"></param>
public static void ToExcel(System.Web.UI.Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
#11
效率不差,曾导过5万条的记录,也就10秒左右的样子
#12
//必须有下面这句!否则不会通过!
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
里面没有代码??
public override void VerifyRenderingInServerForm(Control control)
{
// Confirms that an HtmlForm control is rendered for
}
里面没有代码??
#13
up
#14
虽然数据3W不是很大,但我这3W条是通过三个大数据量的表查询出来的数据(查询的时间占了1-2分钟,这个时间没有办法改变的),dts的使用我倒没有去试过,等下就去试一下.jcyluck的方法可能不大适合我,我只是想把大数据量转成EXCEL,并不需要显示的。希望高手继续给好的建议
#15
在数据库直接手工操作export data
#16
我这3W条是通过三个大数据量的表查询出来的数据
----------------------------
那你先把查询结果放另一个表然后直接倒出Excel
----------------------------
那你先把查询结果放另一个表然后直接倒出Excel
#17
对于导数据,你看看应该有专门的工具...
以前做过Oracle将文本文件导入数据库,用的是Oracle的sqlloader,当时是写成的一个批处理,然后在程序中调就行了,速度特别快...速度大约相当于在程序中解析字符串,然后插入数据库这种做法的25倍左右(做过实验)...
对于从数据库中往外面导,我想也应该有相应的工具吧...如果真有的话,不妨也写成批处理,然后在程序中调用即可...
仅供参考..
以前做过Oracle将文本文件导入数据库,用的是Oracle的sqlloader,当时是写成的一个批处理,然后在程序中调就行了,速度特别快...速度大约相当于在程序中解析字符串,然后插入数据库这种做法的25倍左右(做过实验)...
对于从数据库中往外面导,我想也应该有相应的工具吧...如果真有的话,不妨也写成批处理,然后在程序中调用即可...
仅供参考..
#18
顺便问一下,你用的是什么数据库?
#19
3W条数据,如果前台查看,使用分页显示(一次只取几页的数据即可)。
如果要导出,有几种选择:
1。在服务器上导出到excel,然后把excel下载到客户端来
2。将数据放到DataSet里返回到客户端,然后手动来写excel
个人觉得,1。是个不错的选择。
如果要导出,有几种选择:
1。在服务器上导出到excel,然后把excel下载到客户端来
2。将数据放到DataSet里返回到客户端,然后手动来写excel
个人觉得,1。是个不错的选择。
#20
这里有篇文章说的是从数据库导入excel,8000条只需要4秒钟...
不知道对你有没有帮助...
http://sh.szstudy.cn/showArticle/26700.shtml
不知道对你有没有帮助...
http://sh.szstudy.cn/showArticle/26700.shtml
#21
or try...
http://www.cnblogs.com/forrest_lu/archive/2004/04/21/6966.aspx
方法挺简单,不知道效率如何...
http://www.cnblogs.com/forrest_lu/archive/2004/04/21/6966.aspx
方法挺简单,不知道效率如何...
#22
太感谢liujia_0421了!!!!!
#23
来学习下 顺便帮LZ顶了
#24
3w .
我以前都导过80万的数据.
时间用了好象是十几分钟吧.
如果想要代码:QQ:84115357
我以前都导过80万的数据.
时间用了好象是十几分钟吧.
如果想要代码:QQ:84115357