您的位置:首页 > 其它

.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就没有再截断了。

代码如下:

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐