C#怎么实现通过互联网也能访问数据库?
winfrom类型的
做了一个c/s结构的程序,可现在想实现在局域网和互联网内都能访问,不知道该怎么做了。
有人说可以用webservice,可怎么用没想明白;
是每个form向后台访问时都加个webservice调用;还是只通过webservice获得数据库地址就可以了?
顺便问一下有没有其它方法?
有源码的可否贴一份上来看看?

解决方案 »

  1.   

    winform->web service代理 ->web service->数据库web service代理由vs环境帮你生成。红色部分在客户端,另一个是服务器端。
      

  2.   

    就是数据访问都通过WEB服务的方法来返回数据。如何返回数据都由WEB服务来完成。
      

  3.   

    就是说我每个画面都要调用webservice了?
      

  4.   


    只有连接数据库进行操作的类需要调用webservice,其他该咋地咋地
      

  5.   

    sql 2005,data service
    http://kb.cnblogs.com/page/43963/
      

  6.   


    这个说的很对了,可以说成是每个画面都要调用web service,当然除了不需要数据库中的数据时就不需要调用
    web service了。
    去这里看看http://www.codeplex.com/,都是常用的公开的web service,有的是开源的!
      

  7.   


    网址发错了;
    http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=776756327947797A706B413D
      

  8.   

    方案1:
    每个form向后台访问时都加个webservice调用
    优点:安全 
    缺点:所有数据库输入输出需要提供webservice接口,开发量大
    注意:webservice部署服务器需要外网固定IP方案2:
    直接设置数据库允许外网访问
    优点:开发量小
    缺点:不安全,数据库访问设置需要多加注意,容易遭到攻击,最好限制访问IP,数据库用户也要管理好,密码定期更新,最好改个端口号
    注意:数据库服务器需要外网固定IP
      

  9.   

    是不是只要写一个调用数据库的webservice就可以了啊?
      

  10.   

    webservice 是写好的win-form程序发布到网络上供大家使用,
    你用webservice的时候需要再写一个本地的win-form程序,通过调用你发布的webservice来使用里面的方法。
      

  11.   

    SQL Server 2000别忘了加上SP4补丁
      

  12.   

    web service代理和web service在建工程时,是要建两个工程吗?
      

  13.   

    由于webservice要求使用者有固定的IP地址,这点用户可能没有。想做成既能通过简单的数据连接访问,也能通过webservice通过互联网访问,有什么好办法吗?
      

  14.   

    我现在的想法是就写一个webservice,并在这个webservice中写数据库的连接和配置,并执行sql语句。所有画面都掉它,你觉得如何?
      

  15.   

    我觉得这个应该是我想要的最终答案。
    创建一个webservice,并在这个webservice中写好数据库的连接、配置和执行的方法。
    所有的Winform画面都通过这个webservice来对数据库进行操作。using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;[WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        public Service () {        //如果使用设计的组件,请取消注释以下行 
            //InitializeComponent(); 
        }
        //数据库链接字符串
        string ConnectionString = ConfigurationManager.AppSettings["ConnectionString"];
        [WebMethod]
        public string HelloWorld() {
            return "Hello World";
        }
        [WebMethod]
        /// <summary>
        /// 返回数据集
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public DataSet returnData(string strSql)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                //创建一个数据集 
                DataSet ds = new DataSet();
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
              // conn.Open();
                //创建sqldataadapter对象 
                 SqlDataAdapter adp = new SqlDataAdapter(strSql, conn);           adp.Fill(ds, "table");
               //adp.Dispose();
               return ds;
            }    }
      
        [WebMethod]
        /// <summary>
        /// 返回数据表
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public DataTable returnDataTable(string strSql)
        {
            DataTable dt = new DataTable();
            DataSet ds = returnData(strSql);        if (ds != null && ds.Tables["table"].Rows.Count != 0)
            {
                dt = ds.Tables["table"];
            }
            return dt;
        }
        [WebMethod]
        /// <summary>
        /// 执行数据库语句
        /// </summary>
        /// <param name="strSql"></param>
        public void ExecuteSql(string strSql)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                 if (conn.State != ConnectionState.Open)
                  {
                    conn.Open();
                  }
                    SqlCommand cmd = new SqlCommand(strSql, conn);
                    cmd.ExecuteNonQuery();
                    //conn.Close();
               
            }    }
      
        [WebMethod]
        /// <summary>
        /// 返回一个数据
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public string ExecuteScalar(string strSql)
        {
            string tmp = "";
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                 {
                   conn.Open();
                 }
                SqlCommand cmd = new SqlCommand(strSql, conn);
                tmp = cmd.ExecuteScalar().ToString();
                return tmp;
            }
        }
        [WebMethod]
        /// <summary>
        /// 判断数据是否存在
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public bool HasData(string strSql)
        {
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                SqlCommand cmd = new SqlCommand(strSql, conn);
                SqlDataReader dr = cmd.ExecuteReader();
                bool flag = dr.Read();
                conn.Close();
                return flag;
            }
          }    
    }
      

  16.   

     用Remoting吧.IP可以写在配置文件;