首页 > 代码库 > 数据库

数据库

先在mainpage里面的编写登陆界面,如图:

                       

直接贴代码:

<Grid.RowDefinitions>

            <RowDefinition Height="*"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="*"></RowDefinition>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="100"></ColumnDefinition>

            <ColumnDefinition Width="100"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="1" Grid.Column="2" Text="用户名" FontSize="18" HorizontalAlignment="Center"></TextBlock>

        <TextBlock Grid.Row="2" Grid.Column="2" Text="密  码" FontSize="18" HorizontalAlignment="Center"></TextBlock>

       <TextBox Grid.Row="1" Name="username_login" Grid.Column="3" Margin="3"></TextBox>

  <PasswordBox Grid.Column="3" Name="password_login" Grid.Row="2" Margin="3"></PasswordBox>        <Button Name="login" Grid.Row="3" Grid.Column="2" Content="确 定" Width="60" Height="25" Click="login_Click_1" ></Button>

        <Button Name="register" Grid.Row="3" Grid.Column="3" Content="注 册" Width="60" Height="25" Click="register_Click_1" ></Button>

 

再重新添加一个新建项,建立silverlight页,命名为register

 

把红色区域删了,自己编写界面,注意有click事件的地方要自己重写,不然后台不会生成点击事件的方法

<Grid.RowDefinitions>

            <RowDefinition Height="*"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="30"></RowDefinition>

            <RowDefinition Height="*"></RowDefinition>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="100"></ColumnDefinition>

            <ColumnDefinition Width="100"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

            <ColumnDefinition Width="*"></ColumnDefinition>

        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="1" Grid.Column="2" Text="用户名" FontSize="18" HorizontalAlignment="Center"></TextBlock>

        <TextBlock Grid.Row="2" Grid.Column="2" Text="密  码" FontSize="18" HorizontalAlignment="Center"></TextBlock>

        <TextBox Grid.Row="1" Name="username" Grid.Column="3" Margin="3"></TextBox>

     <PasswordBox Grid.Column="3" Name="password" Grid.Row="2" Margin="3"></PasswordBox>       

<Button Name="ok" Grid.Column="2" Grid.Row="3" Width="70" Content="确 定" FontSize="16" Click="ok_Click_1"></Button>

        <Button Name="cancel" Grid.Column="3" Grid.Row="3" Width="70" Content="取 消" FontSize="16" Click="cancel_Click_1"></Button>

 

 

好了,两个页面搭建好了,我们写一下跳转事件,比如  点击注册  肯定要跳到注册页面你才能输入注册信息 等等

 

我们在主页,也就是登陆界面的

 

选中click后的内容,右击定位到事件处理程序,会自动跳转到后台方法实现的地方

 

 

 

 

我们在红色区域里面要实现跳转事件

 

this.Content = new register()[A1] ;

好了,设置好弹出注册页面这个功能之后,我们在设置注册界面的取消事件,我想是实现注册成功或失败后,我点击取消,这个注册页面都会消失。同上面一样,我们进入到这个取消事件的处理程序中

 

 

this.Layoutroot.Visibility = Visibility.Collapsed;

好了,现在可以正式写注册了。

 

WCF服务

1.WCF服务

 

添加WCF服务

 

在IService1里面写方法申明

Service1在方法的具体内容

 

在这里面写具体方法的内容

 

现在我们先写一个注册用户的方法,首先需要在SQL中建立一张用户表,建立两个字段分别为用户名和密码。这里在SQL Server中建立Data数据库,并在数据库中建立register_info。

这里要特别注意,最好把数据库建立在和程序同一个目录下

 

好了,现在可以实现注册方法了

在方法申明中我们建立方法

[OperationContract]

bool createUser(string userName, string passWord);

接着我们实现这个申明的方法

在实现这个方法之前,我们要加两个引用

using System.Data;

using System.Data.SqlClient;

下面直接贴代码

  public bool createUser(string userName, string passWord)

        {

            try

            {

                //连接数据库

                SqlConnection conn = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;initial catalog=Data");[A2] 

                conn.Open(); //打开数据库

                //设置command属性

                SqlCommand com = new SqlCommand();

                com.Connection = conn;

                com.CommandType = CommandType.Text;

                //操作数据库

                com.CommandText = "insert into register_info([userName],[passWord]) values (‘" + userName + "‘,‘" + passWord + "‘)";

                com.ExecuteNonQuery();

                conn.Close();

 

                return true;

            }

            catch (Exception ex)

            {

                return false;

            }

        }

 

 

好了,现在我们写好了注册数据库的方法了,我们在客户端调用它。

 

右击test.web 重新生成一下

 

在引用右击,添加服务引用

 

点击确定后,我们在刚才建立的注册页面

 

进入确定按钮的事件处理程序

 

在写确定事件之前我们还要加一个引用

using System.ServiceModel;

 

下面我们在方法里面写:

 

 string uName = this.username.Text;

            string pWord = this.password.Password;          //注册createUserCompleted事件

            host.Service1Client h = new host.Service1Client();

            h.createUserCompleted += [A3] new EventHandler<host.createUserCompletedEventArgs>(h_createUserCompleted);

            //调用createUserAsync()方法创建

            h.createUserAsync(uName, pWord)[A4] ;

 

 

 

void h_createUserCompleted([A5] object sender,host.createUserCompletedEventArgs e)

        {

            if (e.Result)

            {

                MessageBox.Show("注册成功!");

 

            }

            else

            {

                MessageBox.Show("注册不成功!");

            }

 

        }

 

 

 

下面是解决登陆问题,同样我们要在WCF中编写登陆代码。有图有真相:

 

[OperationContract]

bool ReadUser(string userName, string passWord);

声明读数据库里面表,验证用户填写的登陆信息。

下面我们实现这个声明的方法

 

 

 

 

 public bool ReadUser(string userName, string passWord)

        {

            try

            {

                SqlConnection conn = new SqlConnection(@"Data Source=(local);Integrated Security=SSPI;initial catalog=Data");

                conn.Open();

 

                string sql = "select * from  register_info where register_info.userName=@username and register_info.passWord=@pwd";

                SqlCommand cmd = new SqlCommand(sql, conn);

                cmd.Parameters.AddWithValue("@username", userName);

                cmd.Parameters.AddWithValue("@pwd", passWord);

 

                SqlDataAdapter da = new SqlDataAdapter(cmd);

                DataTable dt = new DataTable();

                da.Fill(dt);

 

                if (dt.Rows.Count > 0)

                {

                    return true;

                }

                else

                {

                    return false;

                }

 

            }

            catch (Exception ex)

            {

                return false;

            }

 

        }

 

 

好了,到这里,我们已经实现了验证登陆的这个功能了,下面我们重新生成一下test.web

我们就可以在客户端调用这个方法,来验证用户登陆时输入的信息是否正确

 

进入到事件处理程序

 

同样我们这里添加引用

using System.ServiceModel;

 

在登陆处理事件里面写入下面代码

string uName = this.username_login.Text.Trim();

            string pWord = this.password_login.Password.Trim();

            host.Service1Client h = new host.Service1Client();

            h.ReadUserAsync(uName, pWord);

            h.ReadUserCompleted += new EventHandler<host.ReadUserCompletedEventArgs>(h_ReadUserCompleted);

 

 

 

void h_ReadUserCompleted(object sender, host.ReadUserCompletedEventArgs e)

        {

            if (e.Result)

            {

               this.Content = new Map();[A6] 

            }

            else

            {

                MessageBox.Show("登录失败!");

            }

 

        }

 

 

 

上面实现了,注册于登陆。下面我们回到webgis中,与地图打交道了。

这里我不发布地图,就用API里面的地图,给大家展示一下控件和查询,地图渲染。

 

首先我们建立的Map页面是空的,下面我们打开ArcGIS API for Silverlight按步骤一个个实现

1.加载地图

加载地图的时候我们直接加载  API里面那个做查询的那个地图,省得后面还要加

 

根据老师的要求,要会查询,图表展示,我推测他考spatial query的可能性比较大,因为这里面包含了查询,图表展示等功能。

 

我们就选这个地图

首先看看他的XAML代码

 

把这几个引用都加到我们建好的Map界面的XAML里面

 

 

下面我们直接把API里面的代码复制到我们的Map里面。

 

 

圈中的部分代表是查找地图属性的哪些字段,这个到时候考试的时候以给的地图文档为准,看它的属性字段有哪些就写哪些

好了,写好前段的代码了,现在我们写后台的CS代码

同样我们也是复制

 

我们进入Map的CS代码编写的地方,把API里的代码复制到这里

 

复制1和2,到下图位置

 

剩下的代码全部复制,注意复制的位置,


注册界面的命名

Initial catalog后面就是你建立的数据库名字

在打完+=后,按两下Tab建,会生成下面的一个方法

传入获取的你填写的用户名和密码到WCF服务里面

这个方法是上面一步生成的

这个界面是如果登陆成功后,将会跳转到这个页面。我们现在新建一个silverlight页面

命名为Map。

数据库