那些年我们遇到的bug系列一(安卓+asp.net+sql server开发)

项目具体开发过程可参见博客http://blog.csdn.net/zhyl8157121/article/details/8169172。

这里只是记录下作为一个小白写代码实际过程中遇到的大大小小的bug_(:зゝ∠)_


数据库部分


bug1:

asp.net 测试中 select 语句说什么都不好使,最后发现 User 是数据库的关键字,不能用作 table 名。默默把表名改成了 Users。


bug2:

sql server 建了一个新用户,本来是理所当然地把权限全给了用户,然后。。。竟然不好用了= =。最后知道 denydatawriter 是拒绝该用户修改数据库中的任何数据。_(:зゝ∠)_

[图1]


黑科技1:

sql server 中设置id自增。

[图片2]



ASP.NET部分


bug3:

右击项目发布时,Deploy发布形式第一次成功后,之后就不知道为什么无法导入数据库配置= =。而且 Deploy发布貌似会替换现有的 Web.config 文件,于是在 Web.config 中配置的数据库连接字符串以及添加的POST,GET请求方式也没有用了= =。

所以选择了文件发布形式,在 Web.config 中写入数据库连接字符串如下,数据库无法预览,但是好用= =。

<span style="font-size:14px;"><configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <httpRuntime/>
  </system.web>
  <connectionStrings>
    <add name="connStr" connectionString="xxx" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration></span>


bug4:

本地测试时可以使用POST请求方式,但发布后就没了。。。于是如上手动添加对于POST请求的支持(毕竟POST传参方便)。


黑科技2:

从数据库中读数据,通过 DataSet 中转直接转成 XML 格式字符串,就是这么简单。

        public String ExecuteXml(String commStr)
        {
        //commStr为sql语句,sqlcon为SqlConnection的实例
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(commStr, sqlCon);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds.GetXml();
            }
            catch (Exception e)
            {
                return null;
            }
        }


IIS配置部分


bug5:

asp.net 的 Framework 版本需要跟 IIS 中的一致,在 vs 中项目设置更改项目的 Framework 版本或更改网站的应用程序池都行。

更改应用程序池设置方式:-->更改.NET FrameWork版本

-->应用程序池-->更改版本

-->网站-->自己的网站-->基本设置-->选择应用程序池


bug6:

网站需要拥有物理路径的身份验证及授权,在 “基本设置” 中选择 “连接为” , 连接为特定用户,用户名及密码为 windows 管理员账户及密码(管理员账户没有密码的话就新建一个有密码的管理员吧)。


bug7:

只能通过localhost+端口号访问,不能用ip+端口号访问后端服务器。

网站-->自己的网站,点击“绑定”,将主机名设为自己的ip地址。



安卓部分


bug8:

发送 post请求,获取 response code 后无法获取返回头中 Content-Length 的值,inputStream中获取的数据长度为0。故使用缓存数组,逐段读取信息直至输入流末尾代码如下。

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte buffer[] = new byte[1024];
InputStream is = con.getInputStream();
int count = -1;  
while ((count = is.read(buffer, 0, buffer.length)) != -1)  
	bos.write(buffer, 0, count);
is.close();
Bundle bd = new Bundle();
bd.putString("data", bos.toString("utf-8"));
ps: post请求需要单开线程,否则会报异常。可以在新线程中将 post 到的数据写入 Message ,主Activity 中写一个 Handler 处理该 message ,在生成 post 请求的同时将 Handler 传入线程即可。


bug9:

从后端得到的 xml 字符串是被转义过的,所以需要反转义以得到正确信息。使用第三方commons-lang包,StringEscapeUtils类中的unescapeHtml4方法进行反转义。


bug10:

依然xml_(:зゝ∠)_。xml解析时,会将两个节点间的换行、空格等空白字符也解析为一个节点,最终使用正则把空白都给替换掉了。s = s.replaceAll(">\\s+<", "><");



遇到的比较烦的bug大概就是这样,如果想起来的话继续补充。

//要发第一篇博客了w~lalala~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值