如何从Sql Server获取数据到android?

时间:2015-04-13 15:08:02

标签: c# android sql-server

我想在我的Android应用程序中从Sqlserver获取数据。

首先,我将我的应用程序与C#中的Web服务构建连接起来就像这样。

   public class DataHelper
    {

        public static Cliente[] ListadoClientes()
        {

            DataSet dst = new DataSet();
            string instrumentos = "";


            /*try
            {*/
                var connectionString = ConfigurationManager.ConnectionStrings["TestAndroid"].ConnectionString;

                //Create string connections
                SqlConnection con = new SqlConnection(connectionString);
                //open connections
                con.Open();
         /*       if (con != null)
                {*/
                    //Query to database
                SqlCommand cmd = new SqlCommand("select clrut,Clnombre,Clcodigo from parametros..CLIENTE", con);




                    SqlDataReader dr = cmd.ExecuteReader();
                    List<Cliente> lista = new List<Cliente>();

                    while (dr.Read())
                    {
                        lista.Add(new Cliente(dr.GetDecimal(0),
                                                dr.GetString(1),
                                                dr.GetDecimal(2)));

                    }


                   // dr.Close();
                    con.Close();
                    return lista.ToArray();
   }

该代码是副服务器,我正在捕获android上的数据。

    //Tarea Asíncrona para llamar al WS de consulta en segundo plano
    private class TareaWSConsulta extends AsyncTask<String,Integer,Boolean> {

        private Cliente[] listaClientes;

        protected Boolean doInBackground(String... params) {

            boolean resul = true;

            final String NAMESPACE = "http://xxxx.net";
            final String URL="http://iplocaliis/ServicioClientes.asmx";
            final String METHOD_NAME = "metodoCliente";
            final String SOAP_ACTION ="http://xxxxxx/ListadoClientes";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;

            envelope.setOutputSoapObject(request);

            HttpTransportSE transporte = new HttpTransportSE(URL);

            try 
            {
                transporte.call(SOAP_ACTION, envelope);

                SoapObject resSoap =(SoapObject)envelope.getResponse();

                listaClientes = new Cliente[resSoap.getPropertyCount()];

                for (int i = 0; i < listaClientes.length; i++) 
                {
                       SoapObject ic = (SoapObject)resSoap.getProperty(i);

                       Cliente cli = new Cliente();
                       cli.id = Integer.parseInt(ic.getProperty(0).toString());
                       cli.nombre = ic.getProperty(1).toString();
                       cli.telefono = Integer.parseInt(ic.getProperty(2).toString());

                       listaClientes[i] = cli;
                }
            } 
            catch (Exception e) 
            {
                resul = false;
            } 

            return resul;
        }

        protected void onPostExecute(Boolean result) {

            if (result)
            {
                //Rellenamos la lista con los nombres de los clientes
                final String[] datos = new String[listaClientes.length];

                for(int i=0; i<listaClientes.length; i++)
                     datos[i] = listaClientes[i].nombre;

                ArrayAdapter<String> adaptador =
                    new ArrayAdapter<String>(MainActivity.this,
                        android.R.layout.simple_list_item_1, datos);

                lstClientes.setAdapter(adaptador);
            }
            else
            {
                txtResultado.setText("Error!");
            }
        }
    }

它可以很好地使用Wifi,但当我将连接更改为3g时,它无法正常工作。

Web服务在本地IIS中发布。

2 个答案:

答案 0 :(得分:1)

这是一个网络问题,除非您配置路由器,否则无法从公共IP地址访问本地Web服务。

答案 1 :(得分:0)

您的代码没有问题,这是网络问题。

<强> 1。为什么它与Wifi连接有效?

当您的服务器和手机都连接到同一个WLAN时,它们都在本地网络中,因此您的应用可以访问服务器。

<强> 2。为什么不用3G网络?

手机连接3G网络后,手机和服务器不在同一网络中。此外,您的服务器IP不是公共IP,因此您的应用无法访问您的服务器。

第3。如何使服务器可访问

  • 为您的服务器应用公共IP。
  • 购买云服务器,并在服务器上部署您的Web服务。