这个委托怎么写比较好呢?如果用泛型委托 该怎么做下 谢谢了
时间:2011-12-19
来源:互联网
是这样的 我有一个数据库导入的方法 主要是把Xls数据导入到SQL里边的,但是这个方法不是通用的 我现在想把这个方法
改成通用的就想到了用委托去实现
C# code
// public delegate int AddDatasetToSQL(object obj); 这个是起初想法 后来换成下边 public delegate int AddDatasetToSQL<T>(T obj); /// <summary> /// 将上传文件中的数据读取到数据库中 /// </summary> /// <param name="fileName">上传的文件的地址</param> public static void ImportXlsData(string fileName, AddDatasetToSQL<object> AddData, Object obj) { try { if (fileName == string.Empty) { throw new ArgumentNullException("Excel文件上传失败!"); } string oleDBConnString = String.Empty; oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;"; oleDBConnString += "Data Source="; oleDBConnString += fileName; oleDBConnString += ";Extended Properties=Excel 8.0;"; OleDbConnection oleDBConn = null; OleDbDataAdapter oleAdMaster = null; DataTable m_tableName = new DataTable(); DataSet ds = new DataSet(); oleDBConn = new OleDbConnection(oleDBConnString); oleDBConn.Open(); m_tableName = oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (m_tableName != null && m_tableName.Rows.Count > 0) { m_tableName.TableName = m_tableName.Rows[0]["TABLE_NAME"].ToString(); } string sqlMaster; sqlMaster = " SELECT * FROM [" + m_tableName.TableName + "]"; oleAdMaster = new OleDbDataAdapter(sqlMaster, oleDBConn); oleAdMaster.Fill(ds, "m_tableName"); oleAdMaster.Dispose(); oleDBConn.Close(); oleDBConn.Dispose(); if (!obj.Equals(null)) { //委托添加数据库 AddData(obj); } } catch (Exception ex) { throw ex; } }
以上都不能达到我想要的结果;问题是 AddDatasetToSQL 这个委托不能确定 其参数类型 所以我第一次订为 object 后来发现不行
就用 AddDatasetToSQL<T>(T obj); 但同样在ImportXlsData方法中 还是不能订这个 T类型,如果要实现这个功能 该怎么做?
---------------------------------------------------------------
想了一个方法 发现不怎么好用 就是 写一个为空基类(BaseClass 这里是实体层)去继承它,
这个 public delegate int AddDatasetToSQL(object obj); 的object就可以换成BaseClass,然后BLL层的也去继承用到的实体层,但总觉得的这个方法不好。
如果用泛型委托 该怎么做下 谢谢了
作者: e8love 发布时间: 2011-12-19
你那个obj是什么东西?如果仅仅是导入数据,根本用不到委托,因为方法是可以定死的。至于类型,你也不需要确定,使用DataTable类型不是更好?这里完全没必要用实体类,DataTable加载了外部数据,然后解析DataTable的列结构,往数据库里插入,如此简单思路都没想到吗?
作者: qldsrx 发布时间: 2011-12-19
是这样的 我的意思是
导入数据时 要同时插入数据到数据库
所以要有个方法
比如 导入
student 表 有个方法是 Add(student Std)
User 表 有个方法是 Add(User Users)
其他都类似 如果不用委托 该用什么去做比较好点 要做个 比较通用的
导入数据时 要同时插入数据到数据库
所以要有个方法
比如 导入
student 表 有个方法是 Add(student Std)
User 表 有个方法是 Add(User Users)
其他都类似 如果不用委托 该用什么去做比较好点 要做个 比较通用的
作者: e8love 发布时间: 2011-12-19
根本不是用委托,这里只是操作实体类的话,可以定制一个接口来操作,或者用反射,因为你方法是固定的,而实体类的类型不定,其实就是里面的属性不定,因此只涉及到反射。
作者: qldsrx 发布时间: 2011-12-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28