您的位置:首页 > 其它

祝福一切有情万福安康!《ado.net学习与实践》连载(不定时添加)(数据表通用增删改查方法)

2013-02-11 13:47 615 查看
在连载之前,先公布每次都要使用的通用方法:这个方法设计目的执行批量作业。

public void 自动协调更新数据表行(List<object> 参数)
        {/*static DataSet可写为静态并返回数据方法:DataSet 缓存数据表 = new DataSet(); return 缓存数据表;*/
            OleDbDataAdapter 数据表更新数据库 = new OleDbDataAdapter();
            try
            {
                Thread 更新数据库 = new Thread(delegate()
                {
                    DateTime 方法开始 = System.DateTime.Now;
                    using (OleDbConnection 打开连接 = new OleDbConnection(数据源))/*自动打开并在语句结尾自动关闭*/
                    {
                        foreach (object[] 元素 in 参数)
                        {
                            数据表更新数据库.SelectCommand = new OleDbCommand(((string[])元素[0])[0], 打开连接);/*必须初始化*/
                            OleDbCommandBuilder 自动生成协调 = new OleDbCommandBuilder(数据表更新数据库);/*必须应用*/
                            if (((bool[])元素[1])[2])
                                数据表更新数据库.Update(缓存数据表.Tables[((string[])元素[0])[1]]);
                            if (缓存数据表.Tables[((string[])元素[0])[1]] != null && !((bool[])元素[1])[0] && ((bool[])元素[1])[1])
                                缓存数据表.Tables[((string[])元素[0])[1]].Rows.Clear();
                            if (((bool[])元素[1])[1])
                                数据表更新数据库.Fill(缓存数据表, ((string[])元素[0])[1]);
                            if (((string[])元素[0])[2] != "")
                                成功友情提示("[" + ((string[])元素[0])[2] + "],数据保存成功!");
                        }
                        缓存数据表.AcceptChanges();
                    }
                    DateTime 方法结束 = System.DateTime.Now;
                    成功友情提示("执行时间" + (方法结束 - 方法开始).Milliseconds.ToString("〖0,000〗") + "毫秒,自动协调更新数据表行!");
                }); 更新数据库.Start(); 更新数据库.Join();
            }
            catch (Exception Ts)
            { 错误友情提示("数据表更新:对发生的错误表示抱歉!请阐述发生错误时的具体操作过程回馈给管理员!" + Ts.ToString()); }
            finally 
            {
            }
        }

之后将陆续发布使用该方法用于实践的例子。

《壹》

接下来首先说明几点:

1.《ADO.NET高级编程》这是学习资料,虽然有些页打不开,但对于学习无碍,已经足够了.

2.了解学习中使用到的这些资料(类和方法):

OleDbConnection

OleDbDataAdapter

OleDbCommand

OleDbCommandBuilder

.Update(dataset)

Fill

AcceptChanges()

.Dispose()

static string

C#教程之数组教程及其他教程

对数据进行排序



《贰》

今天有了“小犇”2013年3月5日,来说说如何应用上面方法实现查询数据库返回数据表,返回数据表可绑定给显示控件。传递给方法的参数写法说明如下:

参数组.Add(new object[] { new string[] { SQL SELECT语句, 返回数据表名称, 提示字符 }, new bool[] { 布尔值, 布尔值, 布尔值 } });

例举:

static string 数据源 = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = 数据库名.mdb";/*数据库放在当前工程目录*/

DataSet 缓存数据表 = new DataSet();/*设为公共变量*/

下面写在任何过程中:

List<object> 参数组 = new List<object>();

参数组.Add(

new object[] {

new string[] {

"SELECT * FROM 数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC",/*标准SQL语法*/

"表名称", /*返回数据表的名称,因为一个DataSet可以有多个Tables*/

""/*弹出提示框的提示字符串,如果不需要设为空*/

},

new bool[] {

false, /*如果需要多次查询结果累积设为true,否则为false*/

true,/*如果需要返回一个Tables结果集设为true,否则为false*/

false/*如果操作数据库,如更新,插入,删除设为true,否则为false*/

}

}

);

自动协调更新数据表行(参数组);

这样即可得到查询的数据集。

下次例举如何写模糊查询及如何写一个方法来扩展模糊查询。



2013年3月8日,模糊搜索扩展语句如下:

if (模糊扩展.Checked)

for (int 读 = 0; 读 < 搜索内容.Length; 读 += 2)

搜索内容 = 搜索内容.Insert(读, "%");

搜索内容 += "%";

下次例举如何用DataSet更新数据库。



2013年3月11日,如何更新数据库如下:

首先,必须使DataSet 缓存数据表中已经存在一个查询出来的数据表,对该数据表进行编辑;

其次,无论采用任何方式修改了数据表中的任何单元数据后执行更新数据库,如:

1.缓存数据表.Tables["啊啊啊"].Rows[0][5] = "数据处理";

2.创建新数据行更新已有数据行,如下:

DataRow 新数据行 = 缓存数据表.Tables["啊啊啊"].NewRow();

新数据行[1] = "一切众生,心想异故,造业亦异,由是故有诸趣轮转。";

新数据行[2] = "龙王,汝见此会及大海中,形色种类,各别不耶?如是一切,靡不由心,造善不善,身业语业意业所致。而心无色,不可见取,但是虚妄,诸法集起,毕竟无主,无我我所。虽各随业,所现不同,而实于中,无有作者,故一切法皆不思议。";

新数据行[3] = "自性如幻,智者知已,应修善业,以是所生,蕴处界等,皆悉端正,见者无厌。";

DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'");

int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]);

缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].ItemArray = 新数据行.ItemArray.ToArray();/*用新建数据行更新原有数据行*/



下面是表内容被修改后执行更新数据库的语句如下:

List<object> 参数组 = new List<object>();

参数组.Add(

new object[] {

new string[] {"SELECT * FROM 数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称", "" },

new bool[] { false, false, true }

}

);

自动协调更新数据表行(参数组);

与上次查询相似,只是布尔值发生了改变而已,当然SQL语句根据需要写。

下次发布如何新增数据后更新数据库。



2013年3月14日,今天说如何插入数据更新到数据库,和上面发布的更新数据库一样,只是改成用ADD方法把数据插入表中就可以了。

如:

缓存数据表.Tables["啊啊啊"].Rows.Add(新数据行);

List<object> 参数组 = new List<object>();

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称", "" }, new bool[] { false, false, true } } );

自动协调更新数据表行(参数组);

下次发布如何删除数据后更新数据库。



2013年3月26日,今天说如何删除数据,和上面修改数据一样,首先按条件找到需要删除的数据行,用找到的数据行获得其在数据表中的序号,用序号删除该行数据。

如:

DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'");

int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]);

缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/

List<object> 参数组 = new List<object>();

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称", "" }, new bool[] { false, false, true } } );

自动协调更新数据表行(参数组);



至此,用数据表对数据库的操作都介绍完整了,掌握这些就可以快乐开始数据库软件编程之旅了,对于开发一个普通数据库软件来说已经绰绰有余,易如反掌,如探囊取物。

下次说说如开篇之初提出的设计目标,如何进行数据库批量操作例举。



2013年4月14日,坐地转太阳48周,今天例举如何执行批量操作,批量获得数据表,如下:

List<object> 参数组 = new List<object>();

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名1 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称1", "" }, new bool[] { false, true, false } } );

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名2 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称2", "" }, new bool[] { false, true, false } } );

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名3 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "表名称3", "" }, new bool[] { false, true, false } } );

自动协调更新数据表行(参数组);

请注意:<自动协调更新数据表行>方法中写有线程,是否采用线程看需要取舍,有些学人照抄代码,不能灵活取舍应用,这里不得不啰嗦一句了,如不需要线程,把如下代码删除即可:

Thread 更新数据库 = new Thread(delegate()

{

}); 更新数据库.Start(); 更新数据库.Join();

下次说说如何批量更新数据库.

2013年5月22日,一半坐地转太阳47周;所谓批量相对而言,其一数据库表的数据批量处理,如:批量插入、更新、删除数据,其二多表操作。如:

缓存数据表.Tables["啊啊啊"].Rows[0].Delete();

缓存数据表.Tables["啊啊啊"].Rows[1].Delete();/*删除*/

缓存数据表.Tables["啊"].Rows.Add(新数据行);

缓存数据表.Tables["啊"].Rows.Add(新数据行);/*新增*/

缓存数据表.Tables["啊啊"].Rows[0].ItemArray = 新数据行.ItemArray.ToArray();

缓存数据表.Tables["啊啊"].Rows[1].ItemArray = 新数据行.ItemArray.ToArray();/*更新*/

List<object> 参数组 = new List<object>();

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名1 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "啊啊啊", "" }, new bool[] { false, false, true } } );

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名2 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "啊", "" }, new bool[] { false, false, true } } );

参数组.Add( new object[] { new string[] {"SELECT * FROM 数据表名3 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "啊啊", "" }, new bool[] { false, false, true } } );

自动协调更新数据表行(参数组);

其实上面都已经介绍过了,就是说个综合应用概念。

下次说说其他应用。



2013年8月11日知心可人42周;有关数据表联合查询应用,无论如何在建立数据表时都要建立一列数字自增主键以便作为与任何数据表关联之用,这种方法最简捷有效,无论这一列 数字自增主键是用还是不用.以前当需要双表查询时联合查询SQL语句是常规用法,如今一改以往做法,以单表查询主次关联的数据效果一样,只是把单表操数据作改为双表操作数据,这一改大大简化了拼写SQL语句的麻烦,顿觉清爽.当然如果因为习惯也可把双表合并为单表也是一样的,不再为拼写查询语句而烦恼.拆开联合查询的方法更适合一棵树显示主表,数据视图网格控件显示次表的应用界面设计.

List<object> 参数组 = new List<object>();

参数组.Add( new object[] { new string[] {"SELECT * FROM 主数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "啊", "" }, new bool[] { false, false, true } } );

参数组.Add( new object[] { new string[] {"SELECT * FROM 次数据表名 WHERE 列名 like'" + 条件 + "' order by 列名 ASC", "啊", "" }, new bool[] { false, false, true } } );

自动协调更新数据表行(参数组);

其实上面都已经介绍过了,就是说个综合应用概念。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: