宝哥软件园

访问数据库多条数据插入的解决方案

编辑:宝哥软件园 来源:互联网 时间:2021-08-03

类型:数据库类大小:521KB语言:中文评分:5.0标签:立即下载当下接近数据库可能要被遗忘了!比较这个轻量级数据库被精简了许多功能,个人感觉用起来还是挺麻烦的!当前接近在企业项目中就是一块鸡肋。数据量小使用数据库是浪费,既然选择了接近就别抱怨了!如果用好了还是一块宝!废话不多说了,今天就来探讨下如何向接近中插入多条数据把!

由于在此之前我没有用过接近数据库的,当需要想数据库中插入多条数据时,我们不妨先按照数据库的做法:"在表名(第一列,第2列)中插入值(a、b)、(c、d)、(e、f)"。于是按照这个思路,我的第一个方案出来了。

尝试一:

演示:

StringBuilder Buildist=new StringBuilder(字符串。格式('({0},0 ',UserID));foreach(Rpt _ AdminRole中的重复项目项项目){如果(项目.项目类型==列表项目类型.项目||项目项目类型==列表项目类型.交替项){ HtmlInputCheckBox cbRole=项.FindControl('cb_Role ')作为HtmlInputCheckBoxif (cbRole .选中){ BuiList .追加(',(');内置。追加(用户标识);内置。追加(',');内置。追加(cbRole .价值);内置。追加(')');} } }

达尔人:

///摘要///添加作用关系////summary///param name=' RoleContact '角色关系eg: '(1,1),(1,2)'/param ///返回/返回公共静态int插入角色联系人(字符串角色联系人){字符串SQL='插入天空_管理_角色(管理标识,角色标识)值角色接触;返回普通的.OleDbHelper。ExecuteNonQuery(命令类型.文本、sql、null);}

高级管理人员下就会出现这样的错误:SQL语句的结束位置缺少分号(;)。

接近对结构化查询语言的支持果然是大大精简,到此尝试一失败!很快在我有另外想法。数据库多表查询对选择表格的支持!我可以直接传一个数据表到结构化查询语言语句中,说干就干!

尝试二

演示:获取数据表

public DataTable GetInsertSQL(Repeater rep,string controlID){ DataTable data=new DataTable();数据。列。添加(' AdminID ');数据。列。添加(' RoleID ');foreach(重复项目代表中的项目){ if(项目.项目类型==列表项目类型.项目||项目项目类型==列表项目类型.交替项){ HtmlInputCheckBox CB=项.查找控件(控件标识)作为HtmlInputCheckBoxif (cb .选中){ DataRow row=data .NewRow();划船ItemArray=新对象[] { UserID,cb .值};数据。行。添加(行);} } }返回数据;}

Dal:

公共静态int insert Role contact(DataTable dt){ string SQL=' insert in Sky _ Admin _ Role(AdminID,RoleID)从@数据中选择* ';oledb参数[]param=新oledb参数[]{新oledb参数(' @ Data ',){值=dt } }返回普通的.OleDbHelper。ExecuteNonQuery(命令类型.文本、sql、param);}

当代码到这里我就知道此方法行不通,因为OledbType中没有对应的桌子类型,如果是数据库由于支持可扩展标记语言可以设置为SqlDbType .可扩展标记语言类型来传递数据表数据,由于结构化查询语言本事对可扩展标记语言的支持,可以用结构化查询语言基于可扩展标记语言的查询,本文主要讨论访问,此处暂不讨论了!尝试二宣布失败!接下来我又想到了零时表,访问是不是也支持零时表的查询呢?

尝试三

演示:取出我想要的数据格式(1,2,3)

公共字符串GetInserCollection(Repeater rep,string controlID){ StringBuilder buicolectnt=new StringBuilder(' ');buiCollecton .追加('(0 ');foreach(重复项目代表中的项目){ if(项目.项目类型==列表项目类型.项目||项目项目类型==列表项目类型.交替项){ HtmlInputCheckBox CB=项.查找控件(控件标识)作为HtmlInputCheckBoxif (cb .选中){ buiCollecton .追加(字符串。格式(',{0} ',cb .值));} } } buiCollecton .追加(')');返回buiCollecton .ToString();}

Dal :

public static int insert role contact(int UserID,字符串角色集合){ StringBuilder BuiSqL=new StringBuilder(' ');BuiSQL .追加('声明@SkyContact表(userID int,RoLeid int);');BuiSQL .追加('插入@SkyContact值,从天空_角色中选择UserID ',R _ ID ');BuiSQL .追加(字符串。格式('插入天空_管理员_角色值(从@SkyContact中选择*其中角色在{0})',角色集合));返回普通的.OleDbHelper。ExecuteNonQuery(命令类型.文本,BuiSQL .ToString(),null);}

这里模仿数据库中定义一个零时表,然后向其中插入尽可能全的数据,然后在基于零时表查询出想要的数据放入到我想要的数据中执行!高级管理人员下结果又出问错了!此处抛出这样的错误:无效的结构化查询语言语句;期待删除'、'插入'、'过程'、'选择、或更新。其实会出错完全可以想想的到,毕竟接近中连插入表格值(1,2),(1,3)这样的语句都不支持。此时尝试三也不得不宣告失败!尝试了这么多,我不得不使用早就准备用的方法多条插入一起执行。

尝试四

演示:先获取我想要的数据形式:1,2,3 此处略。看sql:

公共静态int insertrolecont2(int UserID,string RoleCollection){ string[]arr=RoleCollection .拆分(',');StringBuilder buildSqL=new StringBuilder(' ');foreach(arr中的字符串项){ BuilSQL .追加(字符串。格式('插入天空_管理_角色(管理标识,角色标识)值({0},{ 1 });',用户标识,转换. ToInt32(项目)));}返回普通的.OleDbHelper。ExecuteNonQuery(命令类型.文本,BuilSQL .ToString(),null);}

执行下结果打出我的意外:在结构化查询语言语句结尾之后找到字符。竟然连这种语句都不支持,没相当接近会对数据支持的这么少。既然这样也不行,难道只有循环执行每一天结构化查询语言语句吗?我看可行!循环是必要的,只要不多次连接数据库,也不会占用太多资源的,此时引出了我的本文的重点,如何向接近中插入多条记录。

尝试五

演示:

public static void InsertMultipleSQL(int UserID,string角色集合){ string[]arr=角色集合.拆分(',');使用(oledb连接conn=新的oledb连接(公共。配置。access conn str)){ oledb command cmd=conn . create command();OleDbTransaction trans=null尝试{ conn . Open();trans=conn . BeginTransaction();cmd .交易=交易;foreach(arr中的字符串项){ cmd .CommandText=字符串。格式(字符串。格式('插入天空_管理_角色(管理标识,角色标识)值({0},{ 1 });',用户标识,转换. ToInt32(项目)));cmd .execution query();} trans .commit();}捕获(异常ex) { trans .回滚();扔ex;} } }

请注意,当插入多个语句时,我们不应该忘记,一旦发生异常,我们需要撤销操作,因此我们必须使用事务。在执行Aceess插入时,我们需要在连接关闭前循环插入,以减少资源的临时使用,提高性能。这是第五次尝试成功的公告!

更多资讯
游戏推荐
更多+