首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

新手散分:在企业库中用UpdateDataSet+存储过程如何传存储过程的参的

2013-08-06 
新手散分:在企业库中用UpdateDataSet+存储过程怎么传存储过程的参的?想实现的功能:实现在线发消息功能,消

新手散分:在企业库中用UpdateDataSet+存储过程怎么传存储过程的参的?
想实现的功能:实现在线发消息功能,消息发送后不立即存入数据库,而是缓存住等过期后再一起插入数据库。我在网上找就只发现有两种方法可以实现,UpdateDataSet就是期中一种。
因为之前没接触过这个方法,所以找了这个方法来看一下,自己做了个例子试了试,结果报存储过程没传参的错。
疑问:在UpdateDataSet中不是自动根据列名来对应参数插入的,那该怎么加的?
在网上找了此资料但都不是很明了,所以来求救。

    /// <summary>
        /// 使用DataSet来更新数据库
        /// </summary>
        /// <param name="ds">是一个强类型实体</param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static int UpdateDataSet(MsnDS ds, string tableName)
        {
            SqlCommand  AddMsn=(SqlCommand)GetStoredProcCommand(SPAddMsn);
            ds.Msn.AddMsnRow(-1, "001", DateTime.Now, DateTime.Now, "002", "tes2t", "te2st", 0);
            AddMsn.Parameters.Add("@Msn_ID",SqlDbType.Int,8,"Msn_ID");
            AddMsn.Parameters.Add("@Msn_Receiver_ID", SqlDbType.VarChar, 16, "Msn_Receiver_ID");
            AddMsn.Parameters.Add("@Msn_Send_Date", SqlDbType.DateTime, 20, "Msn_Send_Date");
            AddMsn.Parameters.Add("@Msn_Send_ID", SqlDbType.VarChar, 16, "Msn_Send_ID");
            AddMsn.Parameters.Add("@Msn_Title", SqlDbType.NVarChar, 20, "Msn_Title");
            AddMsn.Parameters.Add("@Msn_Content", SqlDbType.NVarChar, 500, "Msn_Content");
            AddMsn.UpdatedRowSource = UpdateRowSource.None;
            //这上面的方法是我模仿别人写的,有错的。


            return Common.DataBaseFacade.UpdateDataSet(ds, tableName, AddMsn, GetStoredProcCommand(SPUpdateMsn), GetStoredProcCommand(SPDelMsn));
        }

        /// <summary>
        /// 获得一个存储过程DbCommand
        /// </summary>


        /// <param name="SPString"></param>
        /// <returns></returns>
        public static DbCommand GetStoredProcCommand(string SPString)
        {
            return mydb.GetSqlStringCommand(SPString);
        }


        /// <summary>
        /// 使用数据集更新数据库
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="tableName"></param>
        /// <param name="SPInsert"></param>
        /// <param name="SPUpate"></param>
        /// <param name="SPDelete"></param>
        /// <returns></returns>
        public static int UpdateDataSet(DataSet ds, string tableName, DbCommand SPInsert, DbCommand SPUpate, DbCommand SPDelete)
        {
            return mydb.UpdateDataSet(ds, tableName, SPInsert, SPUpate, SPDelete, GetTransaction());
        }
注:
1.最终目的是实现消息集合从缓存中读取后再一起把新的消息批量插入到数据库中去,如果有更好的方法能实现这个功能的请指点一下,一样有分。
2.使用的是sql2005以上的数据库,通过企业库进行连接。这些是不会变了的。
3.最好能给出个小实例来看看(请养成良好的编程习惯,多加注释。)。 企业库 ASP.NET UpdateDataSet 数据库 批量插入
[解决办法]
回答1:你这个不应该叫散分,应该叫提问。
回答2:"而是缓存住等过期后再一起插入数据库。" 过期了你怎么提交数据呢?你的目的是为何?
回答3:“疑问:在UpdateDataSet中不是自动根据列名来对应参数插入的,那该怎么加的?”


        当然可以根据列名(字段)来插入。 前提是你需要提交update语句的自定义条件。
回答4:你既然是DataSet的更新操作,就和存储过程没有关系。
回答5:"3.最好能给出个小实例来看看(请养成良好的编程习惯,多加注释。)。 "
      也请你养成编程学习的好习惯:多动脑,多摸索。提问请教要谦虚! 
       你括号里的字改成“楼主初学编程,请多注释说明,效果会好的多。”
        这类简单问题,我想你多摸索下,应该能解决的。
[解决办法]
我只告诉你一个基本知识,之所以使用缓存机制,是因为缓存数据与数据库中的数据基本上完全一致,因此我们才读取缓存(而不需要成千上万次地查询数据库)。

而你所谓的“缓存”中的数据与数据库根本不一致,你刻意弄出无厘头数据或者脏数据,这叫做缓存?
[解决办法]
如果确实为了减少数据库负荷,可以将消息insert到一个static的DataTable,然后用SqlBulkCopy 批量插入。

SqlBulkCopy bcp = new SqlBulkCopy(cn);//cn是一个SqlConnection的实例
bcp.BatchSize = batchSize;//每一批次中的行数。                        bcp.BulkCopyTimeout = timeout;//操作可用的最大时间(单位:秒)。
bcp.DestinationTableName = destinationTableName;//目标数据表名称。
bcp.WriteToServer(srcTable);//srcTable是源数据表datatable
bcp.Close();

热点排行