银河

SKYIV STUDIO

  博客园 :: 首页 ::  ::  :: 订阅 订阅 :: 管理 ::
  221 随笔 :: 2 文章 :: 2262 评论 :: 48 引用

  在编写有关数据库方面的C#程序时,经常需要知道数据库的表中各字段的以下信息:
  1. 用于OracleParameter(或SqlParameter,...)中的字段和属性的数据库特定的数据类型。
  2. 其对应的.NET数据类型。
  如下面的程序片断所示:

using (OracleConnection conn = new OracleConnection(Pub.ConnString))
{
  conn.Open();
  OracleCommand comm 
= new OracleCommand(
    
"SELECT trdate,txcode,drcrf,amount,balance,tellerno,txnote,zoneno,nodeno FROM detail "+
    
"WHERE accno=:accno AND currtype=:currtype ORDER BY accno,currtype,trdate,seqno", conn);
  comm.Parameters.Add(
"accno", OracleDbType.Int64).Value = long.Parse(acc.Substring(4,13));
  comm.Parameters.Add(
"currtype", OracleDbType.Int16).Value = curr;
  
using (OracleDataReader r = comm.ExecuteReader())
  
{
    
for (cnt = 0; r.Read(); cnt++)
    
{
      DataRow dr 
= dt.NewRow();
      dr[
"TrDate"= r.GetDateTime(0);
      dr[
"Txcode"= r.GetInt32(1);
      dr[
"Drcrf"= IcbcEtc.GetDrcrfString(r.GetInt16(2));
      dr[
"Amount"= r.GetInt64(3/ R;
      dr[
"Balance"= r.GetInt64(4/ R;
      dr[
"Tellerno"= r.GetInt32(5);
      dr[
"TxNote"= r.GetString(6);
      dr[
"Zoneno"= r.GetInt32(7);
      dr[
"Nodeno"= r.GetInt32(8);
      dr[
"Txname"= DbTrxCode.GetNewName((int)dr["Txcode"]);
      dt.Rows.Add(dr);
    }

  }

}

  为此,我编写了一个小工具,其应用示例如下:

  这里是源程序(ODP.NET版),需要下载“Oracle Data Provider for .NET”,其命名空间是: Oracle.DataAccess.Client。

using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using Oracle.DataAccess.Client;

namespace Skyiv.Util.Odpnet
{
  
class OdpnetDlg : Form
  
{
    Label    lblTable;
    TextBox  tbxConn;
    TextBox  tbxSql;
    TextBox  tbxMsg;
    Button   btnSubmit;
    CheckBox chkStru;
    DataGrid dgOut;
    
string strConn = "Data Source=ora-m38;User ID=test;Password=p@ssw0rd";

    
public OdpnetDlg()
    
{
      SuspendLayout();
      
      btnSubmit 
= new Button();
      btnSubmit.Text 
= "执行";
      btnSubmit.Location 
= new Point(10420);
      btnSubmit.Size 
= new Size(6024);
      btnSubmit.Click 
+= new EventHandler(Submit_Click);
      btnSubmit.Anchor 
= (AnchorStyles.Bottom | AnchorStyles.Left);

      chkStru 
= new CheckBox();
      chkStru.Text 
= "结构";
      chkStru.Location 
= new Point(80420);
      chkStru.Size 
= new Size(6024);
      chkStru.Anchor 
= (AnchorStyles.Bottom | AnchorStyles.Left);

      lblTable 
= new Label();
      lblTable.Text 
= "数据源";
      lblTable.Location 
= new Point(12460);
      lblTable.Size 
= new Size(7024);
      lblTable.Anchor 
= (AnchorStyles.Bottom | AnchorStyles.Left);

      tbxConn 
= new TextBox();
      tbxConn.Text 
= strConn;
      tbxConn.Location 
= new Point(83456);
      tbxConn.Size 
= new Size(62620);
      tbxConn.Anchor 
= (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);

      tbxSql 
= new TextBox();
      tbxSql.Text 
= "select *\r\nfrom v$version\r\n";
      tbxSql.Location 
= new Point(1010);
      tbxSql.Size 
= new Size(240200);
      tbxSql.Multiline 
= true;
      tbxSql.ScrollBars 
= ScrollBars.Both;
      tbxSql.AcceptsReturn 
= true;
      tbxSql.WordWrap 
= true;
      tbxSql.Anchor 
= (AnchorStyles.Top | AnchorStyles.Left);

      tbxMsg 
= new TextBox();
      tbxMsg.Location 
= new Point(10220);
      tbxMsg.Size 
= new Size(240190);
      tbxMsg.Multiline 
= true;
      tbxMsg.ScrollBars 
= ScrollBars.Both;
      tbxMsg.AcceptsReturn 
= true;
      tbxMsg.WordWrap 
= true;
      tbxMsg.Anchor 
= (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left);

      dgOut 
= new DataGrid();
      dgOut.Location 
= new Point(26010);
      dgOut.Size 
= new Size(450436);
      dgOut.CaptionVisible 
= false;
      dgOut.ReadOnly 
= true;
      dgOut.Anchor 
= (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);

      Controls.AddRange(
new Control[]{btnSubmit, chkStru, lblTable, tbxSql, tbxMsg, tbxConn, dgOut});
      Text 
= "数据库查询(ODPNET)";
      ClientSize 
= new Size(720490);
      WindowState 
= FormWindowState.Maximized;

      ResumeLayout(
false);
    }

    
    
void DisplayError(Exception ex)
    
{
      StringBuilder sb 
= new StringBuilder();
      
while (ex != null)
      
{
        sb.Append(
"");
        sb.Append(ex.GetType());
        sb.Append(Environment.NewLine);
        OracleException e 
= ex as OracleException;
        
if (e != null)
        
{
          
for (int i = 0; i < e.Errors.Count; i++) sb.AppendFormat(
            
"Index: {1}{0}Message: {2}{0}DataSource: {3}{0}Source: {4}{0}Number: {5}{0}Procedure: {6}{0}", Environment.NewLine,
            i, e.Errors[i].Message, e.Errors[i].DataSource, e.Errors[i].Source, e.Errors[i].Number, e.Errors[i].Procedure
          );
        }

        
else sb.Append(ex.Message);
        sb.Append(Environment.NewLine);
        ex 
= ex.InnerException;
      }

      tbxMsg.Text 
= sb.ToString();
    }


    
void Submit_Click(object sender, EventArgs e)
    
{
      btnSubmit.Enabled 
= false;
      
string sql = tbxSql.Text.Trim();
      
if (sql.Length == 0return;
      
try
      
{
        
int rows = -2;
        
string strType = "查询";
        
using (OracleConnection conn = new OracleConnection(tbxConn.Text))
        
{
          conn.Open();
          OracleCommand comm 
= new OracleCommand(sql, conn);
          
if (!isQuery(sql))
          
{
            strType 
= "非查询";
            rows 
= comm.ExecuteNonQuery();
          }

          
else if (chkStru.Checked)
          
{
            strType 
= "表结构";
            dgOut.DataSource 
= RunQueryTableStruct(comm);
          }

          
else dgOut.DataSource = RunQueryTableData(comm);
        }

        tbxMsg.Text 
= "运行 SQL 语句完毕(" + strType + ")";
        
if (rows >= 0) tbxMsg.Text = "受影响的行数: " + rows.ToString("N0");
      }

      
catch (Exception ex)
      
{
        DisplayError(ex);
      }

      btnSubmit.Enabled 
= true;
    }

    
    
bool isQuery(string sql)
    
{
      
return sql.Substring(06).ToUpper() == "SELECT";
    }

    
    
private DataView RunQueryTableData(OracleCommand comm)
    
{
      OracleDataAdapter da 
= new OracleDataAdapter();
      da.SelectCommand 
= comm;
      DataSet ds 
= new DataSet();
      da.Fill(ds);
      
return ds.Tables[0].DefaultView;
    }


    
private DataView RunQueryTableStruct(OracleCommand comm)
    
{
      DataTable dt 
= new DataTable();
      dt.Columns.Add(
"#"typeof(int));
      dt.Columns.Add(
"字段名"typeof(string));
      dt.Columns.Add(
"数据类型"typeof(string));
      dt.Columns.Add(
"源数据类型"typeof(string));
      dt.Columns.Add(
"大小"typeof(string));
      dt.Columns.Add(
"备注"typeof(string));
      
using (OracleDataReader r = comm.ExecuteReader(CommandBehavior.KeyInfo))
      
{
        DataTable dt0 
= r.GetSchemaTable();
        
//return dt0.DefaultView;
        foreach (DataRow dr0 in dt0.Rows)
        
{
          DataRow dr 
= dt.NewRow();
          dr[
0= (int)dr0["ColumnOrdinal"];
          dr[
1= (string)dr0["ColumnName"];
          dr[
2= GetBriefType(dr0["DataType"]);
          dr[
3= ((OracleDbType)dr0["ProviderType"]).ToString();
          dr[
4= string.Format(
            
"({0},{1}) {2}", GetInt16(dr0["NumericPrecision"]), GetInt16(dr0["NumericScale"]), (int)dr0["ColumnSize"]
            );
          dr[
5= string.Format(
            
"{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}",
            isTrue(dr0[
"AllowDBNull"   ]) ? "AllowDBNull "  : "",
            isTrue(dr0[
"IsKey"         ]) ? "Key "          : "",
            isTrue(dr0[
"IsUnique"      ]) ? "Unique "       : "",
            isTrue(dr0[
"IsLong"        ]) ? "Long "         : "",
            isTrue(dr0[
"IsReadOnly"    ]) ? "ReadOnly "     : "",
            isTrue(dr0[
"IsRowID"       ]) ? "RowID "        : "",
            isTrue(dr0[
"IsAliased"     ]) ? "Aliased "      : "",
            isTrue(dr0[
"IsByteSemantic"]) ? "ByteSemantic " : "",
            isTrue(dr0[
"IsExpression"  ]) ? "Expression "   : "",
            isTrue(dr0[
"IsHidden"      ]) ? "Hidden"        : ""
            );
          dt.Rows.Add(dr);
        }

      }

      
return dt.DefaultView;
    }

    
    
bool isTrue(object obj)
    
{
      
if (obj == DBNull.Value) return false;
      
return (bool)obj;
    }

    
    
short GetInt16(object obj)
    
{
      
if (obj == DBNull.Value) return -1;
      
else return (short)obj;
    }

    
    
string GetBriefType(object obj)
    
{
      
string s = (obj as Type).ToString();
      
if (string.CompareOrdinal(s, 0"System."07== 0) s = s.Substring(7);
      
return s;
    }


    
static void Main()
    
{
      Application.Run(
new OdpnetDlg());
    }

  }

}

  此外,该程序还有以下各种版本:
System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc;
  限于篇幅,这里不就贴出源程序了,各位可以自己在ODP.NET版本的基础上稍做修改就行了。
  同样是Oracle数据库,使用Oracle.DataAccess.Client和System.Data.OracleClient还是有区别的,请参阅:
Comparing the Microsoft .NET Framework 1.1 Data Provider for Oracle and the Oracle Data Provider for .NET
  例如,对于数据库中的NUMBER类型,Oracle.DataAccess.Client对应的.NET类型可以是byte、short、int、long、decimal等类型,而System.Data.OracleClient一般都对应为decimal类型。

posted on 2005-10-09 22:56 银河 阅读(3521) 评论(30) 编辑 收藏

评论

#1楼 2005-10-10 08:41 HD
老大。别光贴代码。你的工具呢?
 回复 引用   

#2楼 2005-10-10 09:41 syveen      
这是oracle吗?
PL/SQL DEVELOPER完全在你关注的东东上胜任了。
power designer也不错,不过欣赏楼主的钻研精神^^

Oracle.DataAccess.Client是啥组件?
 回复 引用 查看   

#3楼[楼主] 2005-10-10 09:44 银河      
@HD
> 老大。别光贴代码。你的工具呢?
我不是已经在正文中贴出了数据库小工具的完整的源程序了吗?只要把该源程序编译一下就行了。
 回复 引用 查看   

#4楼[楼主] 2005-10-10 09:50 银河      
@syveen
> 这是oracle吗?
是的,这是Oracle
> PL/SQL DEVELOPER完全在你关注的东东上胜任了。
PL/SQL DEVELOPER 无法给出以下信息:
1. 用于OracleParameter(或SqlParameter,...)中的字段和属性的数据库特定的数据类型。
2. 其对应的.NET数据类型。
> Oracle.DataAccess.Client是啥组件?
Oracle.DataAccess.Client是Oracle公司提供的“Oracle Data Provider for .NET”,它和Microsoft公司提供的“Microsoft .NET Framework 1.1 Data Provider for Oracle ” 还是有些不同的,我在正文已经说明了。
 回复 引用 查看   

#5楼[楼主] 2005-10-10 10:36 银河      
下面是 oledb.cs 的源程序, 编译方法是: csc /t:winexe oledb.cs。这个程序和 odpnet.cs 相差不大,基本上就是把 Oracle 替换为 OleDb 就差不多了。
using System;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Drawing;
namespace Skyiv.Util.Oledb
{
  class OleDbDlg : Form
  {
    Label    lblTable;
    TextBox  tbxConn;
    TextBox  tbxSql;
    TextBox  tbxMsg;
    Button   btnSubmit;
    CheckBox chkStru;
    DataGrid dgOut;
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=yes\";Data Source=Test.xls";
    public OleDbDlg()
    {
      SuspendLayout();
     
      btnSubmit = new Button();
      btnSubmit.Text = "执行";
      btnSubmit.Location = new Point(10, 420);
      btnSubmit.Size = new Size(60, 24);
      btnSubmit.Click += new EventHandler(Submit_Click);
      btnSubmit.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);
      chkStru = new CheckBox();
      chkStru.Text = "结构";
      chkStru.Location = new Point(80, 420);
      chkStru.Size = new Size(60, 24);
      chkStru.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);
      lblTable = new Label();
      lblTable.Text = "数据源";
      lblTable.Location = new Point(12, 460);
      lblTable.Size = new Size(70, 24);
      lblTable.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left);
      tbxConn = new TextBox();
      tbxConn.Text = strConn;
      tbxConn.Location = new Point(83, 456);
      tbxConn.Size = new Size(626, 20);
      tbxConn.Anchor = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
      tbxSql = new TextBox();
      tbxSql.Text = "SELECT *\r\nFROM [Sheet1$]\r\n";
      tbxSql.Location = new Point(10, 10);
      tbxSql.Size = new Size(240, 200);
      tbxSql.Multiline = true;
      tbxSql.ScrollBars = ScrollBars.Both;
      tbxSql.AcceptsReturn = true;
      tbxSql.WordWrap = true;
      tbxSql.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
      tbxMsg = new TextBox();
      tbxMsg.Location = new Point(10, 220);
      tbxMsg.Size = new Size(240, 190);
      tbxMsg.Multiline = true;
      tbxMsg.ScrollBars = ScrollBars.Both;
      tbxMsg.AcceptsReturn = true;
      tbxMsg.WordWrap = true;
      tbxMsg.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left);
      dgOut = new DataGrid();
      dgOut.Location = new Point(260, 10);
      dgOut.Size = new Size(450, 436);
      dgOut.CaptionVisible = false;
      dgOut.ReadOnly = true;
      dgOut.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
      Controls.AddRange(new Control[]{btnSubmit, chkStru, lblTable, tbxSql, tbxMsg, tbxConn, dgOut});
      Text = "数据库查询(OLEDB)";
      ClientSize = new Size(720, 490);
      WindowState = FormWindowState.Maximized;
      ResumeLayout(false);
    }
   
    void DisplayError(Exception ex)
    {
      StringBuilder sb = new StringBuilder();
      while (ex != null)
      {
        sb.Append("> ");
        sb.Append(ex.GetType());
        sb.Append(Environment.NewLine);
        OleDbException e = ex as OleDbException;
        if (e != null)
        {
          for (int i = 0; i < e.Errors.Count; i++) sb.AppendFormat(
            "Index: {1}{0}Message: {2}{0}NativeError: {3}{0}Source: {4}{0}SQLState: {5}{0}", Environment.NewLine,
            i, e.Errors[i].Message, e.Errors[i].NativeError, e.Errors[i].Source, e.Errors[i].SQLState
          );
        }
        else sb.Append(ex.Message);
        sb.Append(Environment.NewLine);
        ex = ex.InnerException;
      }
      tbxMsg.Text = sb.ToString();
    }
    void Submit_Click(object sender, EventArgs e)
    {
      btnSubmit.Enabled = false;
      string sql = tbxSql.Text.Trim();
      if (sql.Length == 0) return;
      try
      {
        int rows = -2;
        string strType = "查询";
        using (OleDbConnection conn = new OleDbConnection(tbxConn.Text))
        {
          conn.Open();
          OleDbCommand comm = new OleDbCommand(sql, conn);
          if (!isQuery(sql))
          {
            strType = "非查询";
            rows = comm.ExecuteNonQuery();
          }
          else if (chkStru.Checked)
          {
            strType = "表结构";
            dgOut.DataSource = RunQueryTableStruct(comm);
          }
          else dgOut.DataSource = RunQueryTableData(comm);
        }
        tbxMsg.Text = "运行 SQL 语句完毕(" + strType + ")";
        if (rows >= 0) tbxMsg.Text = "受影响的行数: " + rows.ToString("N0");
      }
      catch (Exception ex)
      {
        DisplayError(ex);
      }
      btnSubmit.Enabled = true;
    }
   
    bool isQuery(string sql)
    {
      return sql.Substring(0, 6).ToUpper() == "SELECT";
    }
   
    private DataView RunQueryTableData(OleDbCommand comm)
    {
      OleDbDataAdapter da = new OleDbDataAdapter();
      da.SelectCommand = comm;
      DataSet ds = new DataSet();
      da.Fill(ds);
      return ds.Tables[0].DefaultView;
    }
    private DataView RunQueryTableStruct(OleDbCommand comm)
    {
      DataTable dt = new DataTable();
      dt.Columns.Add("#", typeof(int));
      dt.Columns.Add("字段名", typeof(string));
      dt.Columns.Add("数据类型", typeof(string));
      dt.Columns.Add("源数据类型", typeof(string));
      dt.Columns.Add("大小", typeof(string));
      dt.Columns.Add("备注", typeof(string));
      using (OleDbDataReader r = comm.ExecuteReader(CommandBehavior.KeyInfo))
      {
        DataTable dt0 = r.GetSchemaTable();
        //return dt0.DefaultView;
        foreach (DataRow dr0 in dt0.Rows)
        {
          DataRow dr = dt.NewRow();
          dr[0] = (int)dr0["ColumnOrdinal"];
          dr[1] = (string)dr0["ColumnName"];
          dr[2] = GetBriefType(dr0["DataType"]);
          dr[3] = ((OleDbType)dr0["ProviderType"]).ToString();
          dr[4] = string.Format(
            "({0},{1}) {2}", (short)dr0["NumericPrecision"], (short)dr0["NumericScale"], (int)dr0["ColumnSize"]
            );
          dr[5] = string.Format(
            "{0}{1}{2}{3}{4}{5}{6}",
            (bool)dr0["AllowDBNull"    ] ? "AllowDBNull "   : "",
            (bool)dr0["IsKey"          ] ? "Key "           : "",
            (bool)dr0["IsAutoIncrement"] ? "AutoIncrement " : "",
            (bool)dr0["IsUnique"       ] ? "Unique "        : "",
            (bool)dr0["IsRowVersion"   ] ? "RowVersion "    : "",
            (bool)dr0["IsLong"         ] ? "Long "          : "",
            (bool)dr0["IsReadOnly"     ] ? "ReadOnly "      : ""
            );
          dt.Rows.Add(dr);
        }
      }
      return dt.DefaultView;
    }
   
    string GetBriefType(object obj)
    {
      string s = (obj as Type).ToString();
      if (string.CompareOrdinal(s, 0, "System.", 0, 7) == 0) s = s.Substring(7);
      return s;
    }
    static void Main()
    {
      Application.Run(new OleDbDlg());
    }
  }
}
 回复 引用 查看   

#6楼[楼主] 2005-10-10 10:41 银河      
Oledb.exe 主要用于查看 Microsoft Access 数据库以及 Microsoft Excel 电子表格的相关信息,以方便 C# 程序通过 ADO.NET 对其进行读写。举例如下:


 回复 引用 查看   

#7楼 2005-10-11 08:40 davidullua      
fine
 回复 引用 查看   

#8楼 2005-10-11 12:11 sagacite[未注册用户]
强烈支持
 回复 引用   

#9楼 2005-10-19 12:55 apenni[未注册用户]
楼主不错。。。小生佩服。。
这是一个不错的工具,
可否提供
System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc; 全部源程序,让我仔细研究研究。。。 ??
apenni@gmail.com 十分感谢
 回复 引用   

#10楼[楼主] 2005-10-20 10:45 银河      
@apenni
OleDb.cs 已经贴在评论区了,其余三个源程序已经发到你的邮箱,请查收。
 回复 引用 查看   

楼主不错。。。小生佩服。。
这是一个不错的工具,
可否提供
System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc; 全部源程序,让我仔细研究研究。。。 ??
ycxp@sina.com 十分感谢
 回复 引用   

#12楼[楼主] 2005-11-18 12:51 银河      
@数据库小工具
已经将源程序发到 ycxp@sina.com ,请查收。
 回复 引用 查看   

#13楼 2005-12-01 03:08 dhyah[未注册用户]
能否将System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc; 源码发一份给我:
dhyah@163.com
十分感谢
 回复 引用   

#14楼[楼主] 2005-12-01 21:12 银河      
@dhyah
已经将源程序发到 dhyah@163.com , 请查收。
 回复 引用 查看   

#15楼 2005-12-23 14:54 狂野都城      
不错,呵呵
 回复 引用 查看   

这是一个不错的工具,
可否提供
主要用于查看 Microsoft Access 数据库以及 Microsoft Excel 电子表格的相关信息的全部源程序,让我仔细研究研究??
lzcub8@21cn.com 十分感谢
 回复 引用   

#17楼 2006-06-21 15:26 Spark Chen      
我觉得这个很实用,能不能发一份给我
sparkchen226#yahoo.com.cn
 回复 引用 查看   

#18楼 2006-07-13 11:09 marsher[未注册用户]
太好了!可否提供主要用于查看 SQL Server 数据库相关信息的全部源程序,让我仔细研究研究? 我的邮箱是marsher_863@126.com
 回复 引用   

能否将System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc; 源码发一份给我:

ttgzs_wt@163.com
ttgzs_wt@126.com

十分感谢
 回复 引用   

不错的工具
能否将System.Data.OracleClient.DLL
发一份给我
sparkdeng@mail2000.com.tw 十分感谢
 回复 引用   

发一份给我
sparkdeng@mail2000.com.tw 十分感谢
 回复 引用   

楼主不错。。。小生佩服。。
这是一个不错的工具,
可否提供
System.Data.OracleClient;
System.Data.SqlClient;
System.Data.OleDb;
System.Data.Odbc; 全部源程序,让我仔细研究研究。。。 ??
sparkdeng@mail2000.com.tw 十分感谢
 回复 引用   

#23楼 2007-08-20 11:41 lindos[未注册用户]
能否发给我这个工具的一个exe,非常感谢.
163lyz@tom.com
 回复 引用   

#24楼[楼主] 2007-08-20 14:39 银河      
@全体朋友们:
没想到几年前写的一个小工具到现在还有人关心。我已经把数据库小工具的全部源程序和编译后的可执行程序放到以下位置提供下载:
http://ben.skyiv.com/download/etc/DbUtil-2007-08-20.zip
请各位自行下载。
 回复 引用 查看   

#25楼 2008-08-19 11:01 zsww      
@银河
http://ben.skyiv.com/download/etc/DbUtil-2007-08-20.zip

现在不能下载了 期待更新!
 回复 引用 查看   

#26楼 2008-09-16 21:32 民工[未注册用户]
楼主能在更新一下吗?现在好像下不了了!期待您的更新....可以发我邮箱里。谢谢
 回复 引用   

#27楼[楼主] 2009-05-07 09:08 银河      
@全体朋友们:
没想到几年前写的一个小工具到现在还有人关心。我已经把数据库小工具的全部源程序和编译后的可执行程序放到以下位置提供下载:
http://files.cnblogs.com/skyivben/DbUtil-2007-08-20.zip
请各位自行下载。
 回复 引用 查看   

#28楼[楼主] 2009-12-05 21:20 银河      
这个小工具有新版本了:数据库小工具整合版
 回复 引用 查看   

#29楼 2010-12-15 19:08 landmark      
麻烦兄弟能不能发给我一份最新的工具及代码啊 谢谢了
landmarkone@163.com
 回复 引用 查看   

#30楼[楼主] 2010-12-15 20:04 银河      
@landmark
已经发到指定的邮箱了。
其实你可以到28楼的评论中的文章末尾处下载的。
 回复 引用 查看