XinL

导航

开发中的技术问题 一

    记录下开发中遇到的一些问题或细节,至于其原理,有时间再慢慢加。
1  c#中对象作函数参数
    c#中对象作函数参数时,是作为引用传递的,但和使用ref关键字又不完全一样。示例代码如下
public class Roster 

    
private string _name; 
    
public string Name 
    

        
get return this._name; } 
        
set this._name = value; } 
    }
 
}
 
public class Default 
{
    
public void MainFun()
    
{
        Roster roster 
= new Roster();
        roster.Name 
= "张三";

        ChangeName3(roster);
        name 
= roster.Name;
        
//name="张三"

        ChangeName1(
ref roster);
        name 
= roster.Name;
        
//name = "李四"

        ChangeName2(roster);
        name 
= roster.Name;
        
//name=王二
    }


    
private void ChangeName1(ref Roster roster) 
    

        roster 
= new Roster(); 
        roster.Name 
= "李四"
    }


    
private void ChangeName3(Roster roster)
    
{
        roster 
= new Roster();
        roster.Name 
= "李四";
    }
 

    
private void ChangeName2(Roster roster) 
    

        roster.Name 
= "王二"
    }

}

2  UpdatePanel 中FileUpload控件的应用
    错误:将FileUpload控件放在UpdatePanel中,则会在服务器端出现“未将对象引用到实例”或“得不到上传文件”的问题。
    解决:此时,需要使用触发器,把触发回送的控件放在<Triggers>内即可。
    原理:

3  JavaScript中内嵌服务器代码的问题
<%@ Page Language="C#" AutoEventWireup="true" Theme="Default" CodeFile="Left.aspx.cs" Inherits="Strategy_Left" %>
<head runat = server>
<script language=javascript> 
  function query()
  {
       
<%= ClientScript.GetCallbackEventReference(this"""GetResultFromServer""")%>
  }
</script>
</head>
<body>
<input id="querybtn" type=button value="查询" class="submit" onclick="query()"/>
</body>

    错误:执行时抛出错误“控件包含代码块(即 <% ... %>),因此无法修改控件集合”。
    原因:在page中使用了主题Theme,而主题要求header需要有runat="server"属性,而此时的脚本中不能包含<%# %>
    解决:将javascript放在body内部。
    原理:

4  数据源控件SqlDataSource在更新DateTime数据时出错。
    错误:使用的 SQL Server 版本不支持数据类型“date”
    原因:找到UpdateParamters字节段,会发现类型为DateTime的参数使用DbType属性,而不是通常用的Type,且DbType属性值为“Date”。这是出现不支持数据类型date的原因;
            <UpdateParameters>
                <asp:Parameter Name="dQueryDate" DbType="Date" />
                <asp:Parameter Name="vCreator" Type="String" />
                <asp:Parameter Name="vMethod" Type="String" />
                <asp:Parameter Name="vScope" Type="String" />
                <asp:Parameter Name="vContent" Type="String" />
                <asp:Parameter Name="nID" Type="Int32" />
            </UpdateParameters>
    解决:将“Date”换成“DateTime”即可

5  SqlServer数据库的表和.net的TableAdapter同步问题
    根据向导创建TableAdapter类型化的DataSet,使用时碰到几个错误
    错误:删除datatable表中的行数据后,adapter.Update(datatable)进行更新数据库时,抛出异常:“当传递具有已删除行的 DataRow 集合时,更新要求有效的 DeleteCommand”
    原因:自动生成的TableAdapter没有DeleteCommand语句。在创建TableAdapter时,虽然在"Advanced Options"选项卡中选择了"create insert,update and delete statements",但是并没有生成Delete和Insert语句,其原因是sqlserver的数据表没有主键。
    解决:在sqlserver中为表设置主键,并在.net中重新配置TableAdapter
    注意事项:在sqlserver中修改数据表后,在.net中必须重新配置TableAdapter才能使用新配置

posted on 2009-07-27 15:50  XinL  阅读(235)  评论(0编辑  收藏  举报