C#怎么实现通过互联网也能访问数据库?
winfrom类型的
做了一个c/s结构的程序,可现在想实现在局域网和互联网内都能访问,不知道该怎么做了。
有人说可以用webservice,可怎么用没想明白;
是每个form向后台访问时都加个webservice调用;还是只通过webservice获得数据库地址就可以了?
顺便问一下有没有其它方法?
有源码的可否贴一份上来看看?
winfrom类型的
做了一个c/s结构的程序,可现在想实现在局域网和互联网内都能访问,不知道该怎么做了。
有人说可以用webservice,可怎么用没想明白;
是每个form向后台访问时都加个webservice调用;还是只通过webservice获得数据库地址就可以了?
顺便问一下有没有其它方法?
有源码的可否贴一份上来看看?
解决方案 »
- C#中zedgraph绘制的图中怎样显示文本和变量值
- 两个datatble合并成一个
- 问一个类似安装文件时的效果
- 请问如何在vs2008 c# winform程序实现一行显示多个同属性结果
- 急:请教,写了一个函数private bool mybool(a,b,c){...},已知字符串“!mybool(1,4,7)&&mybool(2,5,8)”,怎么求出对应的值?
- 请ADO.NET高手回答
- 关于多线程访问listView的锁定问题
- 怎样判断输入的是数字还是字符???
- 能不能用TcpClient通过代理服务器连上internet上的服务器,例如pop.163.net
- 数据库开发的一些小经验!(值得注意的细节)
- 在消息队列中发送了一个消息,如何获得该消息的发送时间?
- 最近想在数据库方面发展,推荐一本书来看看?
只有连接数据库进行操作的类需要调用webservice,其他该咋地咋地
http://kb.cnblogs.com/page/43963/
这个说的很对了,可以说成是每个画面都要调用web service,当然除了不需要数据库中的数据时就不需要调用
web service了。
去这里看看http://www.codeplex.com/,都是常用的公开的web service,有的是开源的!
网址发错了;
http://www.webxml.com.cn/zh_cn/web_services_item.aspx?id=776756327947797A706B413D
每个form向后台访问时都加个webservice调用
优点:安全
缺点:所有数据库输入输出需要提供webservice接口,开发量大
注意:webservice部署服务器需要外网固定IP方案2:
直接设置数据库允许外网访问
优点:开发量小
缺点:不安全,数据库访问设置需要多加注意,容易遭到攻击,最好限制访问IP,数据库用户也要管理好,密码定期更新,最好改个端口号
注意:数据库服务器需要外网固定IP
你用webservice的时候需要再写一个本地的win-form程序,通过调用你发布的webservice来使用里面的方法。
创建一个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;
}
}
}