• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Access数据库多条数据Insert

mysql 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

由于在此之前我没有用过Access数据库的,当需要想数据库中插入多条数据时,我们不妨先按照sql server的做法:insert into tablename(column1,column2) values (a,b),(c,d),(e,f)。于是按照这个思路,我的第一个方案出来了。 尝试一: The Demo: StringBuild

由于在此之前我没有用过Access数据库的,当需要想数据库中插入多条数据时,,我们不妨先按照sql server的做法:“insert into tablename(column1,column2) values (a,b),(c,d),(e,f)”。于是按照这个思路,我的第一个方案出来了。

尝试一:

The Demo:

StringBuilder BuiList = new StringBuilder(string.Format(“({0},0)”, UserID));foreach (RepeaterItem item in Rpt_AdminRole.Items){if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem){HtmlInputCheckBox cbRole = item.FindControl(“cb_Role”) as HtmlInputCheckBox;if (cbRole.Checked){BuiList.Append(“,(“);BuiList.Append(UserID);BuiList.Append(“,”);BuiList.Append(cbRole.Value);BuiList.Append(“)”);}}}

The Dal:

///

/// 添加Role关系///

/// 角色关系 eg: “(1,1),(1,2)”/// public static int InsertRoleContact(string roleContact){string sql = “insert into Sky_Admin_Role(AdminID,RoleID) values “+roleContact;return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, null);}

exec下就会出现这样的错误:SQL 语句的结束位置缺少分号 (;)。

Access对sql的支持果然是大大精简,到此尝试一失败!, 很快在我有另外idea。sql server 多表查询对select table 的支持!我可以直接传一个DataTable到sql语句中,说干就干!

尝试二

The Demo : 获取DataTable

public DataTable GetInsertSQL(Repeater rep,string controlID){DataTable data = new DataTable();data.Columns.Add(“AdminID”);data.Columns.Add(“RoleID”);foreach (RepeaterItem item in rep.Items){if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem){HtmlInputCheckBox cb = item.FindControl(controlID) as HtmlInputCheckBox;if (cb.Checked){DataRow row = data.NewRow();row.ItemArray = new object[] { UserID,本文来源[email protected]搞@^&代*@码2网 cb.Value};data.Rows.Add(row);}}}return data;}

The Dal:

public static int InsertRoleContact(DataTable dt){string sql = “insert into Sky_Admin_Role(AdminID,RoleID) select * from @Data”;OleDbParameter[] param = new OleDbParameter[] {new OleDbParameter(“@Data”,?){Value =dt}};return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, sql, param);}

当代码到这里我就知道此方法行不通,因为OledbType中没有对应的table类型,如果是SQL server由于支持xml可以设置为 SqlDbType.Xml类型来传递DataTable数据,由于sql本事对xml的支持 ,可以用sql基于xml的查询,本文主要讨论Access,此处暂不讨论了!尝试二宣布失败!。接下来我又想到了零时表,Access是不是也支持零时表的查询呢?

尝试三

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

public string GetInserCollection(Repeater rep, string controlID){StringBuilder buiCollecton = new StringBuilder(“”);buiCollecton.Append(“(0”);foreach (RepeaterItem item in rep.Items){if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem){HtmlInputCheckBox cb = item.FindControl(controlID) as HtmlInputCheckBox;if (cb.Checked){buiCollecton.Append(string.Format(“,{0}”, cb.Value));}}}buiCollecton.Append(“)”);return buiCollecton.ToString();}

The Dal :

public static int InsertRoleContact(int UserID,string RoleCollection)
{
StringBuilder BuiSQL = new StringBuilder(“”);
BuiSQL.Append(“declare @SkyContact table(userID int,roleID int);”);
BuiSQL.Append(“insert into @SkyContact values select ” + UserID + “,R_ID from Sky_Role;”);
BuiSQL.Append(string.Format(“insert into Sky_Admin_Role values (select * from @SkyContact where roleID in {0})”,RoleCollection));
return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, BuiSQL.ToString(), null);
}

这里模仿SQL Server中定义一个零时表,然后向其中插入尽可能全的数据,然后在基于零时表查询出想要的数据放入到我想要的数据中执行!exec下结果又出问错了!此处抛出这样的错误:无效的 SQL语句;期待 ‘DELETE’、’INSERT’、’PROCEDURE’、’SELECT’、或 ‘UPDATE’。其实会出错完全可以想想的到,毕竟Access中连insert into table values (1,2),(1,3) 这样的语句都不支持。此时尝试三也不得不宣告失败!尝试了这么多,我不得不使用早就准备用的方法 多条insert一起执行。

尝试四

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

public static int InsertRoleContact2(int UserID, string RoleCollection){string[] arr = RoleCollection.Split(‘,’);StringBuilder BuilSQL = new StringBuilder(“”);foreach (string item in arr){BuilSQL.Append(string.Format(“insert into Sky_Admin_Role(AdminID,RoleID) values ({0},{1});”,UserID,Convert.ToInt32(item)));}return Common.OleDbHelper.ExecuteNonQuery(CommandType.Text, BuilSQL.ToString(), null);}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Access数据库多条数据Insert

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址