如何对数据库中的多张表实现"增/删/改/查/浏览"的功能?

时间:2022-09-16 12:21:32
我有MyTab1,...,MyTab10共10张表,每张表都只有4个字段左右,这些表都是对主表MyTable的一些字段的维护,现在要对MyTab1,...,MyTab10等10张表进行"增/删/改/查/浏览"的功能,请问如何实现,总不能对每张表编写代码吧?最好能将表名"MyTab??"作为参数传入,请大侠及高手们给些指点,有现成或有完整的代码请发邮件到wxshzf@sina.com,问题解决后另外再开贴献分!!!

14 个解决方案

#1


拼SQL啊,你想用??的话,就用个循环把字符替换掉,拼成一个长的SQL再执行.

#2


拼SQL是什么意思,我的??是表示对表的编号,我要的是WebForm操作代码,而不是要SqlServer的代码

#3


用“关系”,或者“触发器”进行操作。

#4


主要是用户界面的代码及控件呢?

#5


上面两们大侠说的好象与我提的功能要求不一致?!

#6


关于数据库操作不用谈,主要指点如何对这10张表中的任意一张的显示,修改,查询,删除等功能,后台的数据库操作可不说

#7


帮顶

#8


1)你通过配置文件或数据库配置表决定哪些表需要进行统一维护
2)编写一套维护操作管理类,负责对任意一个同结构表进行维护,其中表名是一个参数,在所有维护提交时,表名通过字符串拼入insert/update/delete语句,具体维护字段信息通过参数提交。

#9


大侠们,你们平时做数据库方面的程序,是如何对表进行维护?

#10


aafshzj(上海北京) 大侠,给点具体的代码行吗?!

#11


大侠们,都上哪啦?

#12


我个人是通过自己的AAF框架进行所有开发工作。关于AAF的更多信息,可以看看我的blog。

你的这个代码我就给一个粗线条框架吧,你自己充实一下:

using System.Data.SqlClient;

namespace test
{
    public class XxTableManager
    {
        private XxTableManager()
        {
        }

        public static string[] GetXxTableNames()
        {
            // 从配置文件或一个特殊的表读取哪些数据表受本类型“管辖”,你甚至可以更进一步,通过接口建立各种
            // 表族的统一管理入口和各自的“驱动”,但那最好留待将来。
        }

        public static void InsertData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            string sql = "insert into {0} (fieldname1, fieldname1, fieldname1) values (@p0, @p1, @p2)";

            sql = string.Format(sql, table);

            SqlConnection conn = null;
            SqlDataReader reader = null;

            try
            {
                conn = new SqlConnection(yourConnectionString);
                conn.Open();



                /// 创建command,把fieldvalues作为参数写进去。
                SqlCommand cmd = new SqlCommand(sql, conn);

                for (int i = 0; i < fieldValues.Length; i++)
                {
                    // 2. define parameters used in command object
                    SqlParameter param = new SqlParameter();
                    param.ParameterName = "@p" + i;
                    param.Value = fieldValues[i];

                    // 3. add new parameter to command object
                    cmd.Parameters.Add(param);
                }

                // get data stream
                reader = cmd.ExecuteNonQuery();
            }
            //catch
            //{
            //}
            finally
            {
                // close reader
                if (reader != null)
                {
                    reader.Close();
                }

                // close connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        public static void DeleteData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            ......
        }

        public static void UpdateData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            ......
        }

        public static DataSet SelectData(string table)
        {
            ......
        }
    }
}

#13


首先谢谢aafshzj(上海北京),先去看看你的Blog

#14


更正了一下,是可以调试通过的。当然运行还不行,还有很多要你自己实现:

using System.Data.SqlClient;

    public class XxTableManager
    {
        private XxTableManager()
        {
        }

        public static string[] GetXxTableNames()
        {
            // 从配置文件或一个特殊的表读取哪些数据表受本类型“管辖”,你甚至可以更进一步,通过接口建立各种
            // 表族的统一管理入口和各自的“驱动”,但那最好留待将来。
            return null;
        }

        public static void InsertData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            string sql = "insert into {0} (fieldname1, fieldname1, fieldname1) values (@p0, @p1, @p2)";

            sql = string.Format(sql, table);

            SqlConnection conn = null;
            SqlDataReader reader = null;

            try
            {
                string yourConnectionString = null;
                conn = new SqlConnection(yourConnectionString);
                conn.Open();



                /// 创建command,把fieldvalues作为参数写进去。
                SqlCommand cmd = new SqlCommand(sql, conn);

                for (int i = 0; i < fieldValues.Length; i++)
                {
                    // 2. define parameters used in command object
                    SqlParameter param = new SqlParameter();
                    param.ParameterName = "@p" + i;
                    param.Value = fieldValues[i];

                    // 3. add new parameter to command object
                    cmd.Parameters.Add(param);
                }

                // get data stream
                cmd.ExecuteNonQuery();
            }
            //catch
            //{
            //}
            finally
            {
                // close reader
                if (reader != null)
                {
                    reader.Close();
                }

                // close connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        public static void DeleteData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
        }

        public static void UpdateData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
        }

        public static DataSet SelectData(string table)
        {
            return null;
        }
    }

#1


拼SQL啊,你想用??的话,就用个循环把字符替换掉,拼成一个长的SQL再执行.

#2


拼SQL是什么意思,我的??是表示对表的编号,我要的是WebForm操作代码,而不是要SqlServer的代码

#3


用“关系”,或者“触发器”进行操作。

#4


主要是用户界面的代码及控件呢?

#5


上面两们大侠说的好象与我提的功能要求不一致?!

#6


关于数据库操作不用谈,主要指点如何对这10张表中的任意一张的显示,修改,查询,删除等功能,后台的数据库操作可不说

#7


帮顶

#8


1)你通过配置文件或数据库配置表决定哪些表需要进行统一维护
2)编写一套维护操作管理类,负责对任意一个同结构表进行维护,其中表名是一个参数,在所有维护提交时,表名通过字符串拼入insert/update/delete语句,具体维护字段信息通过参数提交。

#9


大侠们,你们平时做数据库方面的程序,是如何对表进行维护?

#10


aafshzj(上海北京) 大侠,给点具体的代码行吗?!

#11


大侠们,都上哪啦?

#12


我个人是通过自己的AAF框架进行所有开发工作。关于AAF的更多信息,可以看看我的blog。

你的这个代码我就给一个粗线条框架吧,你自己充实一下:

using System.Data.SqlClient;

namespace test
{
    public class XxTableManager
    {
        private XxTableManager()
        {
        }

        public static string[] GetXxTableNames()
        {
            // 从配置文件或一个特殊的表读取哪些数据表受本类型“管辖”,你甚至可以更进一步,通过接口建立各种
            // 表族的统一管理入口和各自的“驱动”,但那最好留待将来。
        }

        public static void InsertData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            string sql = "insert into {0} (fieldname1, fieldname1, fieldname1) values (@p0, @p1, @p2)";

            sql = string.Format(sql, table);

            SqlConnection conn = null;
            SqlDataReader reader = null;

            try
            {
                conn = new SqlConnection(yourConnectionString);
                conn.Open();



                /// 创建command,把fieldvalues作为参数写进去。
                SqlCommand cmd = new SqlCommand(sql, conn);

                for (int i = 0; i < fieldValues.Length; i++)
                {
                    // 2. define parameters used in command object
                    SqlParameter param = new SqlParameter();
                    param.ParameterName = "@p" + i;
                    param.Value = fieldValues[i];

                    // 3. add new parameter to command object
                    cmd.Parameters.Add(param);
                }

                // get data stream
                reader = cmd.ExecuteNonQuery();
            }
            //catch
            //{
            //}
            finally
            {
                // close reader
                if (reader != null)
                {
                    reader.Close();
                }

                // close connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        public static void DeleteData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            ......
        }

        public static void UpdateData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            ......
        }

        public static DataSet SelectData(string table)
        {
            ......
        }
    }
}

#13


首先谢谢aafshzj(上海北京),先去看看你的Blog

#14


更正了一下,是可以调试通过的。当然运行还不行,还有很多要你自己实现:

using System.Data.SqlClient;

    public class XxTableManager
    {
        private XxTableManager()
        {
        }

        public static string[] GetXxTableNames()
        {
            // 从配置文件或一个特殊的表读取哪些数据表受本类型“管辖”,你甚至可以更进一步,通过接口建立各种
            // 表族的统一管理入口和各自的“驱动”,但那最好留待将来。
            return null;
        }

        public static void InsertData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
            string sql = "insert into {0} (fieldname1, fieldname1, fieldname1) values (@p0, @p1, @p2)";

            sql = string.Format(sql, table);

            SqlConnection conn = null;
            SqlDataReader reader = null;

            try
            {
                string yourConnectionString = null;
                conn = new SqlConnection(yourConnectionString);
                conn.Open();



                /// 创建command,把fieldvalues作为参数写进去。
                SqlCommand cmd = new SqlCommand(sql, conn);

                for (int i = 0; i < fieldValues.Length; i++)
                {
                    // 2. define parameters used in command object
                    SqlParameter param = new SqlParameter();
                    param.ParameterName = "@p" + i;
                    param.Value = fieldValues[i];

                    // 3. add new parameter to command object
                    cmd.Parameters.Add(param);
                }

                // get data stream
                cmd.ExecuteNonQuery();
            }
            //catch
            //{
            //}
            finally
            {
                // close reader
                if (reader != null)
                {
                    reader.Close();
                }

                // close connection
                if (conn != null)
                {
                    conn.Close();
                }
            }
        }

        public static void DeleteData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
        }

        public static void UpdateData(string table, object[] fieldValues)//可以根据你预先设定的顺序传入字段值
        {
        }

        public static DataSet SelectData(string table)
        {
            return null;
        }
    }