ODBC方式读入txt文件『c#』
如果文本文件使用tab作为分隔符,你必须创建schema.ini文件,你必须在连接串中使用Format=TabDelimited选项。
注意:你必须在sql语句中指定文件名(例如"Select Name, Address From Clients.txt"
【c#】:
例:表table_A,结构如下
字段1 数值
字段2 字符串
字段3 日期
Clients.txt 文本格式如下:
字段1 字段2 字段3
1,"张三",
2,"李四",
3,"王五",
String filename="Clients"; // filename是读入txt文件名
String ServerPath="c:\\"; // ServerPath存放文件的路径
constr="Driver={Microsoft Text Driver (*.txt; *.csv)}; Dbq=" + ServerPath+";Extensions=asc,csv,tab,txt;";
OdbcDataAdapter da=new OdbcDataAdapter ();
OdbcConnection OConn=new OdbcConnection ();
OConn.ConnectionString =constr;
OConn.Open ();
OdbcCommand OCmm=new OdbcCommand ();
OCmm.CommandText = "Select * from "+filename+".txt";
OCmm.Connection=OConn;
da.SelectCommand =OCmm;
DataSet ds = new DataSet ();
try
{
da.Fill(ds,filename);
}
catch
{
OConn.Close();
Response.Write("<script language=\"\">window.alert(\"读入错误!\");</script>");
return ;
}
读入dataset后再处理读入数据表。
schema.ini
[Clients.txt]
ColNameHeader=true
Format=TabDelimited
CharacterSet=ANSI
Col1=字段1 integer
Col2=字段2 Char Width 8
Col3=字段3 date
注:
ColNameHeader,是否带有列标题:
ColNameHeader=true 带列标题(从第2行读入)
ColNameHeader=false 不带列标题(从第1行读入)
Format,文本文件的分割符:
Format=TabDelimited是以tab键为分隔符,Format=Delimited(|)是以’|’为分隔符,Format=Delimited(;)是以’;’为分隔符等等
CharacterSet,是字符集:ANSI、
Col+N:Char Width 9、integer、date、
只能处理一种分隔符的,如有两种或两种以上的要先替换成同一分隔符再导入。
用代码创建schema.ini文件的方法:
声明:
[DllImport("kernel32")]
private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ;
调用
WritePrivateProfileString("Clients.txt"," ColNameHeader","true", ServerPath+"\\schema.ini");
WritePrivateProfileString("Clients.txt"," Format"," TabDelimited ", ServerPath+"\\schema.ini");
WritePrivateProfileString("Clients.txt"," CharacterSet"," ANSI ", ServerPath+"\\schema.ini");
WritePrivateProfileString("Clients.txt"," col1","字段1 integer ", ServerPath+"\\schema.ini");
WritePrivateProfileString("Clients.txt"," col2","字段2 Char Width 8", ServerPath+"\\schema.ini");
WritePrivateProfileString("Clients.txt"," col3","字段3 date ", ServerPath+"\\schema.ini");
注意:WritePrivateProfileString("Clients.txt"," ColNameHeader","true", ServerPath+"\\schema.ini");
Clients.txt:[]里的值,不能用变量+字符串的形式(重复出现[xxxxxx]),可以用变量或固定字符串
ColNameHeader:键值名
True:键值
ServerPath+schema.ini:带路径的ini文件