zoukankan      html  css  js  c++  java
  • .NET平台把其它域名下的数据表内容列出来,比如新闻表(两个网站不在同一服务器)

     

    首先,为了安全起见,服务器的SQLSERVER不开放远程访问,这样,我们有两种方案可以选择,其一就是webservice,其二就是比较简单的XML,今天我主要讲XML。

    先说明一下,两个网站域名为a.com和b.com,a.com是b.com的分站,它们的新闻是共享的,就是一样的,所以没必要在a.com数据库里再重复插入一批数据了。

    解决方案:在b.com里建立一个开放的XML文件,供a.com访问,这样做是安全的,可行的。

    首先在b.com里建立这样一个生成XML的文件:

     public partial class _Default : System.Web.UI.Page
        {
            int rCount = 10;
            int channelId = 1;
            int classId = 1;
     
            protected void Page_Load(object sender, EventArgs e)
            {

    this.rCount = Request.QueryString.AllKeys.Contains("r") ?

    int.Parse(Request.QueryString["r"].Trim()) : this.rCount;

                this.channelId = Request.QueryString.AllKeys.Contains("ch") ?
                                 int.Parse(Request.QueryString["ch"]) : this.channelId;

    this.classId = Request.QueryString.AllKeys.Contains("cl") ?

    int.Parse(Request.QueryString["cl"]) : this.classId;

     
                CreateXML();
            }
     
            /// <summary>
            /// 从数据库中提取数据,生成XML文件
            /// </summary>
            /// <returns></returns>
            public string CreateXML()
            {
                Response.Clear(); //删除所有缓存中的HTML输出
                Response.ContentType = "text/xml";
                // (ContentType 属性指定响应的 HTTP 内容类型) 页面类型为xml,默认为HTML,
                常见的还有image/GIF 和image/JPEG
     
                System.Data.DataSet data = B2ceduData.Data.B2cData.News(this.rCount, 
                this.channelId, this.classId);
                if (data != null)
                {
                    data.WriteXml(Response.OutputStream);
                }
     
                Response.Flush();//立即发送缓冲区中的输出(只有编译产生了至少256字节的数据,
                                 才能在执行Response.Flush()以后将信息发到客户端并显示)
                Response.End();
     
                return data.GetXml();
            }
        }
    }
     
    下面程序接上面的,从b.com数据库里取出新闻列表

        public static class B2cData
        {
            /// <summary>
            /// 获取热门课程列表XML
            /// </summary>
            /// <param name="RowCount">数据行数</param>
            /// <param name="ChannelID">频道ID</param>
            /// <param name="ClassID">分类ID</param>
            /// <returns></returns>
            public static DataSet News(int RowCount, int ChannelID, int ClassID)
            {
                return News(RowCount, ChannelID, ClassID, DBConnectionHelper.ConnString);
            }
     
            /// <summary>
            /// 获取热门课程列表XML
            /// </summary>
            /// <param name="RowCount">数据行数</param>
            /// <param name="ChannelID">频道ID</param>
            /// <param name="ClassID">分类ID</param>
            /// <param name="ClassID">数据库连接字</param>
            /// <returns></returns>
            public static DataSet News(int RowCount, int ChannelID, int ClassID, string connStr)
            {
                try
                {
                    System.Text.StringBuilder sql = new System.Text.StringBuilder();
                    sql.Append(@"SELECT ");
                    sql.Append(RowCount == 0 ? "" : string.Format("TOP {0} ", RowCount));
                    sql.Append(@"a.ArticleID,a.ChannelID,a.ClassID,a.Title,a.Subheading,
                                 a.UpdateTime,a.CreateTime,a.LinkUrl,a.ChannelDir ");

    sql.Append(@"FROM PE_Article a LEFT OUTER JOIN PE_Channel b ON

    a.ChannelID=b.ChannelID ");

                    sql.Append(@"WHERE   ");
                    sql.Append(string.Format(@" a.ChannelID={0} ", ChannelID));
                    sql.Append(string.Format(@"AND a.ClassID={0} ", ClassID));
                    sql.Append(@"ORDER BY A.UPDATETIME DESC");
                    DataSet ds = DBHelper.SELECT(sql.ToString(), connStr);
                    ds.DataSetName = DBConnectionHelper.InitialCatalog;
                    ds.Tables[0].TableName = "PE_Article";
                    return ds;
                }
                catch
                {
                    return null;
                }
            }
     
        }

    OK,现在一个扩展名为aspx的xml文件已经建立好了,假设它的数径为www.b.com/news.aspx

    好了,下面两个程序就是a.com下面的,它们将从b.com的news.aspx页面下得到最新的新闻列表

     public partial class FromXmlGetDatum : System.Web.UI.Page
        {
            Web.Service.NewsService webRequest = null;
            System.Text.StringBuilder html;
            const int MAXROW = 10;
            public FromXmlGetDatum()
            {
                this.webRequest = new Web.Service.NewsService();
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
                GetLatestNews("5.1", "1");
                Response.Write(html);
            }
     
            // 获取最新资讯
            void GetLatestNews(string id, string newsCategoryID)
            {
                html = new System.Text.StringBuilder();

    html.Append("<div id=\"list_" + id.Replace(".", "") + "_1\" class=\"conn\"

    style=\"display:block;\">");

                html.Append("<table width=\"660\" border=\"0\" cellspacing=\"1\" 
                             cellpadding=\"2\" bgcolor=\"#e9e9e9\" style=\"float:left;\">");
                if (!string.IsNullOrEmpty(newsCategoryID))
                {

    List<Web.Service.XMLLastestNews> datas = this.webRequest.

    RequestData(newsCategoryID, MAXROW).Cast<Web.Service.XMLLastestNews>().ToList();

     
                    if (datas.Count > 0)
                    {
                        foreach (var item in datas)
                        {

    html.Append("<tr bgcolor=\"#FFFFFF\"><td><a href='" +

    item.LinkUrl + "/" + Convert.ToDateTime(item.CreateTime).ToString("yyyyMM") + "/" +

    item.ChannelDir + "_" + item.ArticleID + ".shtml' target='_blank'>" +

    item.Title + "</a></td><td>"+item.CreateTime+"</td><td>"+item.Subheading+"</td></tr>");

                        }
                    }
                    else
                    {
                        html.Append("<tr bgcolor=\"#FFFFFF\"><td width=\"100%\"></td></tr>");
                    }
                }
                else
                {
                    html.Append("<tr bgcolor=\"#FFFFFF\"><td width=\"100%\"></td><td></td><td></td></tr>");
                }
                html.Append("</table>");
                html.Append("</div>");
            }
     
        }
    namespace Web.Service
    {
     
        public class NewsService
        {
     
            const string REQUESTURL = "http://www.b.com/news.aspx?ch={0}&cl=1&r={1}"; //从这个XML文件里获取数据
     
            #region IWebRequestService 成员
            /// <summary>
            /// 将XML对象转换为LIST实体返回
            /// </summary>
            /// <param name="id"></param>
            /// <param name="num"></param>
            /// <returns></returns>
            public List<IWebRequestEntity> RequestData(string id, int num)
            {
                List<XMLLastestNews> data;

    System.Xml.Linq.XElement xdoc = System.Xml.Linq.XElement.Load(

    string.Format(REQUESTURL, id, num));

                var items = xdoc.Descendants("PE_Article").Select(item =>
       new Web.Service.XMLLastestNews
                                             {
       ArticleID = item.Element("ArticleID").Value,
                                            ChannelID = item.Element("ChannelID").Value,
      ClassID = item.Element("ClassID").Value,
                                            Subheading = "",
                                            Title = item.Element("Title").Value,
                                            UpdateTime = item.Element("UpdateTime").Value,
                                            CreateTime = item.Element("CreateTime").Value,
                                            LinkUrl = item.Element("LinkUrl").Value,
                                            ChannelDir = item.Element("ChannelDir").Value,
                                                                              }
                                                                      );
                data = items.ToList();
                return data.Cast<IWebRequestEntity>().ToList();
            }
     
            #endregion
        }
    }
  • 相关阅读:
    [Project Euler 603]Substring sums of prime concatenations 题解
    [Project Euler 521]Smallest prime factor 题解
    [Project Euler 520]Simbers 题解
    [Project Euler 517]A real recursion 题解
    省选刷题计划
    [十二省联考2019]春节十二响
    导航
    有用的网址
    [ZJOI2019]线段树
    [十二省联考2019]皮配
  • 原文地址:https://www.cnblogs.com/lori/p/2145415.html
Copyright © 2011-2022 走看看