苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3819|回复: 3

[其他] DBF表通过SQL语句关联操作

[复制链接]
发表于 2013-7-6 14:19:11 | 显示全部楼层 |阅读模式
我有2个表,一个是
T_TDD  一个是T_jhk
我想通过T_TDD表的自动Lqzy和T_jhk表的Zydm关联

可是结果总是不对,是不是要先打开2个表,如果都打开了
那又怎么显示呢,我折腾了几天,搞不懂
请苏大指教

我写的代码
  1.             OdbcConnection conn = new OdbcConnection();
  2.             string table1 = @"G:\DBF\T_TDD.dbf";
  3.             string connStr1 = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table1 + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";

  4.             string table2 = @"G:\DBF\t_jhk.dbf";
  5.             //string connStr2 = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table2 + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO";

  6.             conn.ConnectionString = connStr1;
  7.             conn.Open();
  8.             

  9.             /*
  10.             OdbcCommand cmd = new OdbcCommand();
  11.             cmd.Connection = conn1; //链接dbf数据库

  12.             //string sql = txt_sql.Text; //读取txt_sql的sql文本
  13.             // select * from [table](全路径)
  14.             // string sql = @"select * from " + table;
  15.             string sql = @"select * from " + table1 + " where ksh = '" + txt_sql.Text.Trim() + "'";
  16.             cmd.CommandText = sql;
  17.             cmd.CommandType = CommandType.Text;

  18.             OdbcDataAdapter da = new OdbcDataAdapter(sql, conn1); //填充
  19.             DataTable dt = new DataTable();
  20.             da.Fill(dt);

  21.             dataGridView1.DataSource = dt.DefaultView;
  22.             //dataGridView1.data;
  23.              */

  24.             OdbcCommand cmd = new OdbcCommand();
  25.             cmd.Connection = conn;
  26.             string sql = @"select a.Ksh,a.Xm,a.Sfzh,a.Lqzy,a.Tdcj,b.Zydm,b.Zymc from " + table1 + " a join " + table2 + " b on a.Lqzy = b.Zydm";
  27.             cmd.CommandText = sql;
  28.             cmd.CommandType = CommandType.Text;

  29.             OdbcDataAdapter da = new OdbcDataAdapter(sql, conn);
  30.             DataTable dt = new DataTable();
  31.             da.Fill(dt);

  32.             dataGridView1.DataSource = dt.DefaultView;
复制代码
附件我附上2个dbf表,供老大测试,谢谢!
盼望解答

2个测试表.zip

8.27 KB, 下载次数: 157, 下载积分: 金钱 -1

提到的2个DBF表



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-7-6 15:57:58 | 显示全部楼层
等待老大解决
有会的能朋友能否帮助下
 楼主| 发表于 2013-7-7 13:19:21 | 显示全部楼层
经过一天的折腾
发现dbf表是不是默认放在某个文件夹下,该文件夹就可以视为数据库,而里面的文件就可以看做是表
按照这个思路我重写了下代码
sql语句我在VFP重查询是通过的,不过C#提示我语法from附件有错。
还请高手帮我看下
  1. public partial class Form2 : Form
  2.     {
  3.         string dbfPath = string.Empty;
  4.         public Form2()
  5.         {
  6.             InitializeComponent();
  7.         }

  8.         private void button1_Click(object sender, EventArgs e)
  9.         {
  10.             if (string.IsNullOrEmpty(dbfPath))
  11.             {
  12.                 MessageBox.Show("还没选择文件夹!");
  13.                 return;
  14.             }
  15.             /*
  16.             if (string.IsNullOrEmpty(comboBox1.Text))
  17.             {
  18.                 MessageBox.Show("没有选择数据文件");
  19.                 return;
  20.             }
  21.             */
  22.             string connectString = string.Format(
  23.                 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;"
  24.                 , dbfPath);
  25.             using (OleDbConnection connection = new OleDbConnection(connectString))
  26.             {
  27.                 DataSet ds = new DataSet();
  28.                 try
  29.                 {
  30.                     connection.Open();
  31.                     //OleDbDataAdapter command = new OleDbDataAdapter("select * from " + comboBox1.Text, connection);
  32.                     //string str = @"select t_tdd.lqzy,t_jhk.zydm,t_jhk.zymc from t_tdd.dbf,t_jhk.dbf where t_tdd.lqzy = t_jhk.zydh";
  33.                     string str = @"select a.Ksh,a.Xm,a.Sfzh,a.Lqzy,a.Tdcj,b.Zydm,b.Zymc from T_TDD a join  T_jhk b on a.Lqzy = b.Zydh";
  34.                     OleDbDataAdapter command = new OleDbDataAdapter(str, connection);
  35.                     //OleDbDataAdapter command = new OleDbDataAdapter(@"select a.Ksh,a.Xm,a.Sfzh,a.Lqzy,a.Tdcj,b.Zydh,b.Zymc from " + comboBox1.Text + " a join " + comboBox2.Text + " b on a.Lqzy = b.Zydh", connection);
  36.                     command.Fill(ds, "ds");
  37.                     MessageBox.Show(ds.Tables[0].Rows.Count.ToString());
  38.                 }
  39.                 catch (Exception ex)
  40.                 {
  41.                     MessageBox.Show(string.Format("error:{0}", ex.Message));
  42.                 }
  43.             }
  44.         }

  45.         private void button2_Click(object sender, EventArgs e)
  46.         {
  47.             if (folderBrowserDialog1.ShowDialog() == DialogResult.Cancel)
  48.                 return;
  49.             dbfPath = folderBrowserDialog1.SelectedPath;
  50.             DirectoryInfo di = new DirectoryInfo(dbfPath);
  51.             /*
  52.             comboBox1.Items.Clear();
  53.             foreach (FileInfo fi in di.GetFiles())
  54.             {
  55.                 if (fi.Extension.ToLower() == ".dbf")
  56.                     this.comboBox1.Items.Add(fi.Name.Substring(0, fi.Name.LastIndexOf(fi.Extension)));
  57.                     this.comboBox2.Items.Add(fi.Name.Substring(0, fi.Name.LastIndexOf(fi.Extension)));
  58.             }
  59.             if (comboBox1.Items.Count == 0 | comboBox2.Items.Count == 0)
  60.             {
  61.                 MessageBox.Show("此文件夹中没有数据文件,请确认");
  62.             }
  63.             else
  64.             {
  65.                 comboBox1.SelectedIndex = 0;
  66.             }
  67.             */
  68.         }
  69.     }  
复制代码
 楼主| 发表于 2013-7-7 22:52:03 | 显示全部楼层
问题解决了。我说明下解决办法
方便其他同学,在这里我也学校很多

可以把dbf表所在的文件夹整体看做一个数据库,然后对里面的文件看做是表。

在这个思路下操作dbf文件

我上面的代码基本是可以的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-27 02:27

© 2014-2021

快速回复 返回顶部 返回列表