.Net 下使用ODBC连接xls文件写入大文本的解决办法
2013-11-01 14:44
435 查看
问题:
在.net 下通过ODBC写入大文本,发现xls单元格自动把文本截断为256个字符,同样的代码写入SQL Server 的text字段没有问题。
研究发现,主要是没法告诉xls文件单元格的格式(在excel里面设置为文本也不起做用),查询google后发现(http://support.microsoft.com/kb/257819)数据引擎是通过扫描xls文件前八行来确定类型的,于是手工在第一行对应列(单元内容)输入超过256个字符,再用程序插入数据的时候,excel就没有再截断了。
代码如下:
在.net 下通过ODBC写入大文本,发现xls单元格自动把文本截断为256个字符,同样的代码写入SQL Server 的text字段没有问题。
研究发现,主要是没法告诉xls文件单元格的格式(在excel里面设置为文本也不起做用),查询google后发现(http://support.microsoft.com/kb/257819)数据引擎是通过扫描xls文件前八行来确定类型的,于是手工在第一行对应列(单元内容)输入超过256个字符,再用程序插入数据的时候,excel就没有再截断了。
代码如下:
public bool WriteToXls(DataTable dt,string asheetname) { if (dt != null && dt.Rows.Count > 0) { bool result = false; using( OdbcConnection con = new OdbcConnection()) { string sheetname = "[" + asheetname + "$]"; string insert = "insert into " + sheetname + " ({0}) values ({1})"; string strcon = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + this.FileName + ";ReadOnly=0;HDR=Yes;"; con.ConnectionString = strcon; con.Open(); #region execute sql for (int n = 0; n < dt.Rows.Count; n++) { OdbcCommand cmd = new OdbcCommand(); cmd.Connection = con; StringBuilder sbField = new StringBuilder(); StringBuilder sbFieldParam = new StringBuilder(); #region Make SQL and Parameter for (int col = 0; col < dt.Columns.Count; col++) { string strvalue = dt.Rows [col].ToString().Replace("'", ""); string fieldname = dt.Columns[col].ColumnName; if (strvalue.Length > 255) { OdbcParameter p = new OdbcParameter("?",OdbcType.NText); p.Value = strvalue; p.Direction = ParameterDirection.Input; cmd.Parameters.Add(p); } else { OdbcParameter p = new OdbcParameter("?",strvalue); //p.Value = strvalue; p.Direction = ParameterDirection.Input; cmd.Parameters.Add(p); } sbField.AppendFormat("{0},", fieldname); sbFieldParam.AppendFormat("{0},", "?"); } #endregion string fieldlist = sbField.ToString(); fieldlist = fieldlist.Substring(0, fieldlist.Length - 1); string fieldparamlist = sbFieldParam.ToString(); fieldparamlist = fieldparamlist.Substring(0, fieldparamlist.Length - 1); string sql = string.Format(insert, fieldlist, fieldparamlist); cmd.CommandType = CommandType.Text; cmd.CommandText = sql; result = cmd.ExecuteNonQuery()>0 && result; } #endregion con.Close(); } return result; } else { return false; } }
相关文章推荐
- MFC学习之 将 list 表里的信息写入.txt文本 和 .xls EXCEL 文件中(ODBC)
- 使用64位系统用vs2008开发软件,程序编译后无法连接ODBC的解决办法
- 【使用Excel.Application对象打开的xls文件】与【手动打开的xls文件】在关闭时相互干扰的解决办法
- java使用ODBC连接Access(mdb)文件错误解决方法
- ueditor富文本的使用以及“未找到上传文件”时的解决办法
- 使用aforge的AVIWriter打开或创建文件异常Failed creating compressed stream的解决办法
- .Net中使用com组件后发生System.ArithmeticException异常的解决办法
- 使用video.js文件报错:Failed to load resource: net::ERR_FILE_NOT_FOUND的解决办法
- 关于Win7系统下使用capDriverConnect()连接失败的解决办法
- 创建文本后,写入文本,报“正由另一进程使用,因此该进程无法访问该文件”
- 使用ffmpeg转码的MP4文件需要加载完了才能播放的解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- jsp,使用jdbc连接数据库出现“到主机的TCP/ip连接失败”的解决办法
- SQL Server 2005 连接报"无法使用特殊主体'sa'"解决办法
- RHEL使用yum安装报文件需要更新的错误提示的解决办法
- 32位plsql连接64位oracle 使用命令窗口出错,解决办法
- MySQL导入SQL文件过大或连接超时的解决办法
- C#使用AseClient连接Sybase报无法加载sybdrvado11.dll的解决办法
- 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法
- 64位操作系统使用PLSQL Developer时,“无法解析指定的连接标识符”问题的解决办法