none
东哥在不在,帮忙检查一下代码,谢谢 RRS feed

  • 问题

  •  private void autobh()
            {
       //取已存在编号
            string ybh = "";
            OleDbDataReader dr = null;
                gqh lh = new gqh();
                lh.opencn_lihua(frmlogin.mdbpath, frmlogin.mdbpwd);
                lh.datareader_lihua("select bh from hyb", ref dr);
                while (dr.Read())
                {
                    ybh += dr["bh"].ToString()+"*";
                }
                dr.Close();
                dr.Dispose();
                lh.closecn_lihua();
               //产生当前编号
                string dqbh = "";
                int i;
                for (i = 1; i <= 99999; i++)
                {
                    if (i < 10)
                        dqbh = "0000" + i.ToString();
                    else if (i < 100)
                        dqbh = "000" + i.ToString();
                    else if (i < 1000)
                        dqbh = "00" + i.ToString();
                    else if (i < 10000)
                        dqbh = "0" + i.ToString();
                    else
                        dqbh = i.ToString();

                    if (ybh.Contains(dqbh) == false)
                    {
                        string m = "";
                        if (DateTime.Today.Month < 10)
                            m = "0"+DateTime.Today.Month.ToString();
                        else
                            m = DateTime.Today.Month.ToString();
                      
                        lblhybh.Text = DateTime.Today.Year.ToString() +m+ dqbh;
                        break;
                    }
                }


            }
    =================
    gqh.cs
    ===================
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.OleDb;

    namespace 美容美发管理系统V1._0
    {
        class gqh
        {
            protected static OleDbConnection lhcn = new OleDbConnection();
            protected static OleDbCommand lhcmd = new OleDbCommand();


            public void opencn_lihua(string mdbpath, string pwd)
            {
                try
                {
                    if (lhcn.State == ConnectionState.Closed)
                    {
                        string strcn="provider=microsoft.jet.oledb.4.0;data source="+mdbpath +";jet oledb:database password="+pwd;
                        lhcn.ConnectionString = strcn;
                        lhcn.Open();
                        lhcmd.Connection = lhcn;

                    }
                }
                catch
                {
                }
            }

            public void closecn_lihua()
            {
                try
                {
                    if (lhcn.State == ConnectionState.Open)
                    {
                        lhcn.Close();
                        lhcn.Dispose();
                        lhcmd.Dispose();
                    }
                }
                catch
                {
                }
               
            }
            public void dataset_lihua(string sql, ref DataSet ds)
            {
                OleDbDataAdapter da = new OleDbDataAdapter();
                try
                {
                    lhcmd.CommandType = CommandType.Text;
                    lhcmd.CommandText = sql;
                    da.SelectCommand = lhcmd;
                    da.Fill(ds);
                }
                catch
                {
                }
               
            }
            public void datareader_lihua(string sql,ref OleDbDataReader dr)
            {

                try
                {
                    lhcmd.CommandType = CommandType.Text;
                    lhcmd.CommandText = sql;
                    dr = lhcmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch
                {
                    try
                    {
                        if (dr != null && !dr.IsClosed)
                            dr.Close();
                    }
                    catch
                    {
                    }
                }
               
                  
            }
            public void exesql_lihua(string sql)
            {
                try
                {
                    lhcmd.CommandType = CommandType.Text;
                    lhcmd.CommandText = sql;
                    lhcmd.ExecuteNonQuery();
                }
                catch
                {
                  
                }
            }

           
        }
    }

    上面这段代码是实现ID自动编号的,为什么我怎么都不能正确的运行到最后。高手帮忙看一下,谢谢。


    C#初学者!~~~

    2012年4月29日 13:46

答案

  • 您好:)

    首先你的初始化代码有些啰嗦哦,建议用Format来得以完成——

    private void autobh()
            {
       //取已存在编号
            string ybh = "";
            OleDbDataReader dr = null;
                gqh lh = new gqh();
                lh.opencn_lihua(frmlogin.mdbpath, frmlogin.mdbpwd);
                lh.datareader_lihua("select bh from hyb", ref dr);
                while (dr.Read())
                {
                    ybh += dr["bh"].ToString()+"*";
                }
                dr.Close();
                dr.Dispose();
                lh.closecn_lihua();
    
               //产生当前编号
                string dqbh = "";
                int i;
                for (i = 1; i <= 99999; i++)
                {
                    //自动格式化带“0”的字符串数字
                    dqbh = string.Format("{0:00000}",i);
                   
                    if (ybh.Contains(dqbh) == false)
                    {
                        string m = string.Format("{0:00}",DateTime.Today.Month);
                       
                        lblhybh.Text = DateTime.Today.Year.ToString() +m+ dqbh;
                        break;
                    }
                }
            }

    另外我不明白“不能运行到最后?”是什么意思?请具体说明:

    1)你预想的结果。

    2)你实际的结果。

    3) while (dr.Read())
                {
                    ybh += dr["bh"].ToString()+"*";
                }

    干什么用?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 呆oO 2012年4月30日 1:53
    2012年4月30日 1:42
    版主
  • 上面这段代码是另一个朋友帮忙写的,实际我的代码如下,实现自动编号,ID补漏,我也不多说了,需要的朋友自己看一下吧。

      private void autoNO()
            {
                int id;
                string datapath = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + frm_main.pub_data + ";Jet OLEDB:Database Password=leonahe";
                string sql = "SELECT zjid FROM ZJB";
                OleDbConnection conn = new OleDbConnection(datapath);//创建OLEDB数据库链接路径
                OleDbCommand cmd = new OleDbCommand(sql, conn);//创建
                conn.Open();//打开数据库
                OleDbDataReader dr = cmd.ExecuteReader();

                int idjishu = 0; //声明int变量count =0
                while (dr.Read()) //判断如果DR读取到数据
                {
                    idjishu ++;//count递增1
                }

                int[] idzu = new int[idjishu];//声明数组IDS,并将COUNT赋值为int长度
                int idxuhao = 0;//声明INT变量IDINDEX并赋值为0
                dr = new OleDbCommand(sql, conn).ExecuteReader();//
                while (dr.Read())  //判断如果DR读取到数据
                {
                    if (dr == null)//如果DR的值为空
                    {
                        break;//中断循环
                    }
                    idzu[idxuhao] = dr.GetInt32(0);
                    idxuhao++;
                }

                bool f = false;
                for (int i = 0; i < idzu.Length + 1; i++)
                {
                    f = false;
                    foreach (int a in idzu)
                    {
                        if (i == a)
                        {
                            f = true;
                            break;
                        }
                    }
                    if (f == false)
                    {
                        id = i;
                       // MessageBox.Show(id.ToString());
                        autoid = id.ToString ();
                        break;
                    }
                }
                dr.Dispose();
                cmd.Dispose();
                dr.Close();
            }

    还有个问题想请教东哥,这个函数中的变量,能直接在别的地方调用吗?粗体显示部分。这里我是直接声明个PUBLIC变量autoid,然后把函数中的结果赋给autoid,再在别的地方调用的。


    C#初学者!~~~

    • 已标记为答案 呆oO 2012年4月30日 2:03
    2012年4月30日 1:59

全部回复

  • 您好:)

    首先你的初始化代码有些啰嗦哦,建议用Format来得以完成——

    private void autobh()
            {
       //取已存在编号
            string ybh = "";
            OleDbDataReader dr = null;
                gqh lh = new gqh();
                lh.opencn_lihua(frmlogin.mdbpath, frmlogin.mdbpwd);
                lh.datareader_lihua("select bh from hyb", ref dr);
                while (dr.Read())
                {
                    ybh += dr["bh"].ToString()+"*";
                }
                dr.Close();
                dr.Dispose();
                lh.closecn_lihua();
    
               //产生当前编号
                string dqbh = "";
                int i;
                for (i = 1; i <= 99999; i++)
                {
                    //自动格式化带“0”的字符串数字
                    dqbh = string.Format("{0:00000}",i);
                   
                    if (ybh.Contains(dqbh) == false)
                    {
                        string m = string.Format("{0:00}",DateTime.Today.Month);
                       
                        lblhybh.Text = DateTime.Today.Year.ToString() +m+ dqbh;
                        break;
                    }
                }
            }

    另外我不明白“不能运行到最后?”是什么意思?请具体说明:

    1)你预想的结果。

    2)你实际的结果。

    3) while (dr.Read())
                {
                    ybh += dr["bh"].ToString()+"*";
                }

    干什么用?


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 呆oO 2012年4月30日 1:53
    2012年4月30日 1:42
    版主
  • 谢谢东哥,自己搞定了,借鉴上次你发的代码的思路,自己重写的,已搞定 ,谢谢

    C#初学者!~~~

    2012年4月30日 1:53
  • 谢谢东哥,自己搞定了,借鉴上次你发的代码的思路,自己重写的,已搞定 ,谢谢

    C#初学者!~~~

    可以的话请共享答案,并标记吧,谢谢!

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月30日 1:54
    版主
  • 上面这段代码是另一个朋友帮忙写的,实际我的代码如下,实现自动编号,ID补漏,我也不多说了,需要的朋友自己看一下吧。

      private void autoNO()
            {
                int id;
                string datapath = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + frm_main.pub_data + ";Jet OLEDB:Database Password=leonahe";
                string sql = "SELECT zjid FROM ZJB";
                OleDbConnection conn = new OleDbConnection(datapath);//创建OLEDB数据库链接路径
                OleDbCommand cmd = new OleDbCommand(sql, conn);//创建
                conn.Open();//打开数据库
                OleDbDataReader dr = cmd.ExecuteReader();

                int idjishu = 0; //声明int变量count =0
                while (dr.Read()) //判断如果DR读取到数据
                {
                    idjishu ++;//count递增1
                }

                int[] idzu = new int[idjishu];//声明数组IDS,并将COUNT赋值为int长度
                int idxuhao = 0;//声明INT变量IDINDEX并赋值为0
                dr = new OleDbCommand(sql, conn).ExecuteReader();//
                while (dr.Read())  //判断如果DR读取到数据
                {
                    if (dr == null)//如果DR的值为空
                    {
                        break;//中断循环
                    }
                    idzu[idxuhao] = dr.GetInt32(0);
                    idxuhao++;
                }

                bool f = false;
                for (int i = 0; i < idzu.Length + 1; i++)
                {
                    f = false;
                    foreach (int a in idzu)
                    {
                        if (i == a)
                        {
                            f = true;
                            break;
                        }
                    }
                    if (f == false)
                    {
                        id = i;
                       // MessageBox.Show(id.ToString());
                        autoid = id.ToString ();
                        break;
                    }
                }
                dr.Dispose();
                cmd.Dispose();
                dr.Close();
            }

    还有个问题想请教东哥,这个函数中的变量,能直接在别的地方调用吗?粗体显示部分。这里我是直接声明个PUBLIC变量autoid,然后把函数中的结果赋给autoid,再在别的地方调用的。


    C#初学者!~~~

    • 已标记为答案 呆oO 2012年4月30日 2:03
    2012年4月30日 1:59
  • 怎么个autoid的定义?局部代码请展示出来,谢谢……

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年4月30日 7:37
    版主
  • namespace 模拟考试系统_V1._0
    {
        public partial class frm_zhangjie : Form
        {
            public String autoid ="";
            public frm_zhangjie()
            {
                InitializeComponent();

            }

    上面是声明的变量,然后将autoNO()函数里的ID值赋给变量,就是之前发的那段代码里的,粗体部分.然后在下面将这个变量插入到数据库,不知道这样用对不对?还有没有更简单的方法..

           //添加功能
            private void but_zj_tianjia_Click(object sender, EventArgs e)
            {

               

                if (but_zj_tianjia.Text == "添加")
                {
                    txt_tianjia.Text = "";
                    txt_tianjia.Enabled = true;
                    label1.Enabled = true;
                    but_zj_tianjia.Text = "保存";
                    but_zj_xiugai.Text = "取消";
                    but_zj_shanchu.Enabled = false;
                    txt_tianjia.Focus();
                    return;
                }
                if (but_zj_tianjia.Text == "保存")
                {
                    autoNO();
                    try
                    {

                        but_zj_tianjia.Text = "添加";
                        but_zj_xiugai.Text = "修改";
                        label1.Enabled = false;
                        txt_tianjia.Enabled = false;
                        but_zj_shanchu.Enabled = true;
                        if (txt_tianjia.Text == "")
                        {
                            MessageBox.Show("章节名称不能为空!");
                            return;
                        }

                        string sql = "";
                        sql = "insert into ZJB(zjid,zjmc) values(" + autoid + ", @zjmc)";
                        OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + frm_main.pub_data + ";Jet OLEDB:Database Password=leonahe;");
                        cn.Open();
                        OleDbCommand ocd = new OleDbCommand(sql, cn);


                        ocd.Parameters.Add("@zjmc", OleDbType.Char);
                        ocd.Parameters["@zjmc"].Value = txt_tianjia.Text;
                        ocd.Parameters.Add(autoid, OleDbType.Char);
                        ocd.Parameters[autoid].Value = autoid;
                        ocd.ExecuteNonQuery();
                        cn.Close();

     

     

                        MessageBox.Show("保存成功");
                        Bind_zj();
                    }
                    catch (Exception err)
                    {
                        MessageBox.Show(err.Message);
                    }


                }

                return;

            }

              

    C#初学者!~~~

    2012年4月30日 11:49