随笔 - 30, 文章 - 0, 评论 - 314, 引用 - 11
数据加载中……

2005年10月25日

首次使用Ajax

 

网上可以说对Ajax谈得热火朝天,最近也没什么项目就去看了一下,并写了个关于pop提示框的小程序

运行结果如下



文件说明

popwin.js:弹出提示框的js文件无须改动(这是公用的)

Ajax.dll  :这是Ajax组件

源代码
在Ajax中最可惜的是不能绑定DataGrid服务端控件
在用DataGrid时只能这么写

[Ajax.AjaxMethod()]
  public string  GetAjaxTable()
  {
   try
   {
    DataTable dt=new DataTable();
    SalesManagerQuery m_SalesManagerQuery=new SalesManagerQuery();
    dt=m_SalesManagerQuery.getSales();
    //DataGrid1.DataSource=dt;
    //DataGrid1.DataBind();

    //DataGrid dg = new DataGrid();
    dg.DataSource=dt;
    dg.DataBind();
    dg=DataGrid1;
    DataGrid1.Visible=false;
    System.Text.StringBuilder strb = new System.Text.StringBuilder();
    System.IO.StringWriter sw = new System.IO.StringWriter( strb );
    System.Web.UI.HtmlTextWriter htw = new HtmlTextWriter( sw );
    dg.RenderControl( htw );
    string s = strb.ToString();
    return s;
   }
   catch(Exception ex)
   {
    throw ex;
   }
  }

posted @ 2005-10-25 11:00 surprise 阅读(836) | 评论 (3)编辑

2005年10月24日

大家看一下这是.net的漏洞还是程序有问题,我一时也没搞清,只知道这问题挺怪的

 

代码如下:

1.  WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication4.WebForm1" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

<HEAD>

<title>WebForm1</title>

        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">

        <meta name="CODE_LANGUAGE" Content="C#">

        <meta name="vs_defaultClientScript" content="JavaScript">

        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

        <script language="javascript">

        function aa()

               {

              

               //document.all.Label1.innerHTML="Ok";

               //alert("aa");

               document.getElementById('Button2').click();

               }

</script>

</HEAD>

<body MS_POSITIONING="GridLayout">

        <form id="Form1" method="post" runat="server">

        <FONT face="宋体">

               <asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 304px; POSITION: absolute; TOP: 64px" runat="server"></asp:Label>

               <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 360px; POSITION: absolute; TOP: 136px" runat="server"

               Text="Button1"></asp:Button>

               <asp:Button id="Button2" style="Z-INDEX: 103; LEFT: 320px; POSITION: absolute; TOP: 208px" runat="server"

               Text="Button2"></asp:Button></FONT>

</form>

</body>

</HTML>

2.  WebForm1.aspx.cs

Page_Load中

private void Page_Load(object sender, System.EventArgs e)

     {

          if(!IsPostBack)

         {

              this.Button1.Attributes.Add("onclick","aa()");

         }

}

 

添加事件Button2

private void Button2_Click(object sender, System.EventArgs e)

{

     this.Label1.Text="Ok";

}

代码非常简单
运行结果



单击”Button1”按钮,Button2事件中添加断点如下


 

是能够进入Button2事件的(应该说Label1的值是”Ok”

但结果会是



不知道Label1为空,为什么有谁可以解释一下吗??
源代码:

posted @ 2005-10-24 21:05 surprise 阅读(863) | 评论 (4)编辑

2005年6月30日

一道Sql语句问题?

如有一个数据表test要显示第8到10记录,它的id不是连续的
在Oracle中可以这么写 select rownum from test group by rownum having rownum between 8 and 10;
而在Sql Server 中怎么写?请帮忙解决

posted @ 2005-06-30 12:07 surprise 阅读(972) | 评论 (4)编辑

2005年6月27日

运用C#处理lob数据类型 (Oracle)

 

运用C#处理lob数据类型 Oracle

一、           介绍不规则数据类型

随着媒体技术的进步,人们的要求也越来越多,因此现在的数据库中不单单存储简单的数据类型,还可以存储图片、文件、声音等非常庞大的二进制数据,我们把这种不规则数据类型叫做LOBLarge Object)。对于LOB数据即可以存储50K还可以存储50M的二进制数据内容。

Oracle数据库中,大型数据类型有以下几种:

Clob long型相似,clob可以存储单字节型数据

Nclob Nclob存储定宽的多字节国家字符集数据

Blob:可以存储无结构的二进制数据如图片

Bfile Bfile允许对Oracle数据库以外存储的大型二进制文件进行只读形式的访问。和其它三种lob类型数据 不同的是,bfile类型数据存储在一个单独的文件中,该文件不由Oracle来维护。

在这里主要介绍运用C#储存和读取图片(数据库Oracle)。

二、           处理Blob数据项的方式

1.首先介绍数据表结构

表:student

字段名                                       类型                                   说明

STUDENTID                             number                         id关键字段

SNAME                                     varchar2(50)                 姓名

SPHOTO                                    Blob                             图片

定义了序列SEQ_STUDENT_ID

 

2.接着介绍存储Blob数据项方式

注意:Blob数据不能象其它类型数据一样直接插入(INSERT)。插入前必须先插入一个空的Blob对象,BLOB类型的空对象为EMPTY_BLOB(),之后通过SELECT命令查询得到先前插入的记录并锁定,继而将空对象修改为所要插入的Blob对象。

 调用储存过程方式

       http://www.cnblogs.com/surprise/archive/2005/04/19/140461.html

       优点:层次清晰明了,存储速度快

       缺点:运用dbms_lob包用dbms_lob.write()写入只能存储32k以下的图片

 另一种调用储存过程方式

       Oracle中写存储过程如下:

       create or replace procedure update_student_clob (

              id in number,

              file_name in varchar2)

       is

              b_lob  BLOB;

              f_lob   BFILE;

       BEGIN

              --首先把SPHOTO数据插入空值

              Update student set SPHOTO=empty_blob() where STUDENTID=id;

        --通过SELECT命令查询得到先前插入的记录并锁定

        SELECT SPHOTO INTO b_lob from student where STUDENTID=id for update;

        --读取图片文件对象

        f_lob:=bfilename(‘bb_images’, file_name);

              --打开图片文件对象

              dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);

              --图片文件对象写入Blob数据中

              dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));

              dbms_lob.fileclose(f_lob);

       END;

/

其中:id代表关键字段idfile_name代表文件名 

       bb_images代表目录对象,目录对象创建如下

       create directory bb_images as ‘d:\kk’;

C#中的代码部分与

http://www.cnblogs.com/surprise/archive/2005/04/19/140461.html雷同,在这里就不必多说了

       优点:无论多大的图片都能处理,速度上也非常快

       缺点:只能存储数据库本地的图片

 不用储存过程的方式

       原代码ConsoleApplication2.rar  (推荐,在我们公司项目中就用到了)

优点:解决了所有以上的缺点

缺点:破坏了项目的层次感

 

3.最后介绍读取Blob数据项方式

       原代码WebImage.rar       读取图片的方式比较简单,首先把Blob从数据库中读取出来,接着生成图片格式,最后输出图片就行。

 

以上的方式都是试验成功,如果哪位大虾有更好的方式请随时交流哦

posted @ 2005-06-27 15:47 surprise 阅读(6874) | 评论 (16)编辑

2005年6月17日

介绍一种Web上打印技术

一、    介绍ScriptX控件
对于B/S架构的项目中,Web打印最是让程序员头痛的技术,在这次项目中运用了第三方控件ScriptX解决了此技术包括各种汇总表,详细清单等等,但最大弊端就是打印的格式是死的,你要打印出怎样的格式必须自己来做,还有就是打印分页,它是按你设置的纸张大小来分的,所以必须人为控制,ScriptX控件所需文件ScriptX.cab。(ScriptX下载地址http://www.meadroid.com/scriptx/freedep.asp
打印功能使用:
⑴ 用户在客户端单击“打印”按钮,第一次使用打印会弹出如下对话框
⑵ 单击“是”按钮,此时会把控件ScriptX下载到本机
⑶ 在打印窗口中有大标题、打印条件、打印列表,单击“打印”按钮进入打印浏览界面。
⑷ 单击“Print”按钮,听打印机声音响起。
二、    一个简单的ScriptX控件使用实例
1.界面文件  WebExample.aspx  (其中kg.css是界面样式在这里就不介绍了)
<%@ Page language="c#" Codebehind="WebExample.aspx.cs" AutoEventWireup="false" Inherits="WebPrint.WebExample" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
       <HEAD>
              <title>一个简单的ScriptX打印</title>
              <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
              <meta name="CODE_LANGUAGE" Content="C#">
              <meta name="vs_defaultClientScript" content="JavaScript">
              <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
              <LINK href="kg.css" type="text/css" rel="stylesheet">
       </HEAD>
       <body MS_POSITIONING="GridLayout">
              <form id="WebExample" method="post" runat="server">
                     <TABLE width="100%" height="100%">
                            <tr>
                                   <td height="100">
                                   </td>
                            </tr>
                            <tr>
                                   <td style="HEIGHT: 14px" align="center">
                                          <div id="divTableResult" name="divTableResult">
                                                 <asp:Label id="Label1" runat="server" Width="232px" Height="32px" Font-Size="Large">欢迎使用ScriptX打印</asp:Label>
                                          </div>
                                   </td>
                            </tr>
                            <tr>
                                   <td align="center" valign="top">
                                          <div id="divChartResult" name="divChartResult">
                                                 <asp:Image id="Image1" runat="server" ImageUrl="win2000.gif"></asp:Image>
                                          </div>
                                   </td>
                            </tr>
                            <tr>
                                   <td align="center" valign="top">
                                          <input id="btnPrint" style="WIDTH: 32px; HEIGHT: 19px" onclick="printResult();" type="button"
                                                 size="1" value="打印" name="btnPrint">
                                   </td>
                            </tr>
                     </TABLE>
              </form>
              <script language="javascript">
              function printResult()
              {
                     //针对不同模块,设置打印参数
                     var title = 'ScriptX打印';//报表名称
                     var orien = 'true';//打印页面方向,true:纵向打印/false横向打印
                     //参数设置结束
                     var strURL;
                     title = escape(title);
                     //condition = escape(condition);
                     strURL = 'printContainer2.aspx?title='+title+'&orien='+orien;
                     window.open(strURL,'printResult','height=600, width=800, top=0, left=50,toolbar=no , menubar=no, scrollbars=yes, resizable=no, location=no, status=no');
              }
              </script>
       </body>
</HTML>
说明:
⑴ <div id="divTableResult" name="divTableResult">和<div id="divChartResult" name="divChartResult"> 是在printContainer2.aspx文件中定义的传值标签,因此必须要有。
⑵ printResult()方法用来声明传值内容,具体在方法中已说明
 
2.打印界面   printContainer2.aspx (其中print.css是打印样式就不介绍了)
<%@ Page language="c#" Codebehind="printContainer2.aspx.cs" AutoEventWireup="false" Inherits="WebPrint.printContainer2" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<%
string title = "查询打印";
‘用于title获取标题
if(Request.QueryString["title"].ToString().Trim()!=""){
       title = Request.QueryString["title"].ToString().Trim();
}
‘用于orientation获取打印页面方向,true:纵向打印/false横向打印
string orientation = "true";
if(Request.QueryString["orien"].ToString().Trim()!=""){
       orientation =  Request.QueryString["orien"].ToString().Trim();
}
%>
 
<html>
       <head>
              <title>ScriptX 打印</title>
              <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
              <meta name="CODE_LANGUAGE" Content="C#">
              <meta name="vs_defaultClientScript" content="JavaScript">
              <meta http-equiv="content-type" content="text/html; charset=gb2312">
              <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
              <link href="kg.css" rel="stylesheet" type="text/css">
              <link href="print.css" rel="stylesheet" type="text/css"  media="print" >
<script  FOR=document event="onclick">
if(event.srcElement.tagName=='A'){
              //alert('a click!');
              event.cancelBubble = true;
}
 
</script>
             
<style type="text/css">
a:link {text-decoration:none}
a:visited {text-decoration:none}
a:active {text-decoration:none}
a:hover {text-decoration:none}
 
A { COLOR: #000000;TEXT-DECORATION: none; FONT-SIZE: 8pt;FONT-FAMILY: "";}
 
</style>
       </head>
      
       <body MS_POSITIONING="GridLayout" >
<!--这里调用控件ScriptX.cab-->
<object id="factory" viewastext  style="display:none"
  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
  codebase="ScriptX.cab#Version=6,1,431,2">
</object>
<SCRIPT defer>
//用于设置打印参数
function printBase() {
factory.printing.footer = "&b ScriptX 打印 &b"       //页眉
factory.printing.footer = ""                                 //页脚
factory.printing.portrait = <%=orientation%>             //true为纵向打印,flase为横向打印
factory.printing.leftMargin = 1.5                               //左页边距
factory.printing.topMargin = 0.5                               //上页边距
factory.printing.rightMargin = 0.5                             //右页边距
factory.printing.bottomMargin = 1.0                          //下页边距
}
</SCRIPT>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" bordercolor="#FFFFFF">
  <tr bordercolor="#FFFFFF">
    <td >
       <table width="70%" border="0" cellspacing="0" cellpadding="2" align="center">
         <tr>
           <td align="center"><font size="5" face="宋体"><b><div  name="divTitle" id="divTitle"></div></b></font></td>
         </tr>
         <tr>
           <td align="center">
             <div id="divReport" name="divReport">
             <input type="button" name="cmdPRINT" id="cmdPRINT" onclick="printReport()" value="打印">
             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             <input type="button" onclick="window.close();"  value="关闭">
             </div>
           </td>
         </tr>
       </table>
   </td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2" align="center">
         <tr><td align="center">
<!--  用于显示divTableContainer标签的值 -->
<div id="divTableContainer"  name="divTableContainer"></div>
              </td></tr>
               <tr><td align="center">
<!--  用于显示divChartContainer标签的值 -->
<div id="divChartContainer"  name="divChartContainer"></div>
              </td></tr>
</table>
</body>
<script language="javascript">
//使界面最大化
maxWin();
 
var needcon='';
document.all.divTitle.innerText = unescape('<%=title%>');
 
//用于把父窗体的divTableResult和divChartResult标签的值分别转入divTableContainer 和divChartContainer标签中
var tableContent = window.opener.document.all.divTableResult.innerHTML;
tableContent = replaceAll(tableContent,"<A ","<span ");
tableContent = replaceAll(tableContent,"</A> ","</span> ");
tableContent = replaceAll(tableContent,"<a ","<span ");
tableContent = replaceAll(tableContent,"</a> ","</span> ");
tableContent = replaceAll(tableContent,"<input ","<font ");
tableContent = replaceAll(tableContent,"<INPUT ","<font ");
document.all.divTableContainer.innerHTML = tableContent;
document.all.divChartContainer.innerHTML = window.opener.document.all.divChartResult.innerHTML;
 
//用于调用设置打印参数的方法和显示预览界面
function printReport(){
       printBase();
       //window.print();
       factory.printing.Preview();
}
function replaceAll( str, from, to ) {
    var idx = str.indexOf( from );
    while ( idx > -1 ) {
        str = str.replace( from, to );
        idx = str.indexOf( from );
    }
    return str;
}
function maxWin()
{
     var aw = screen.availWidth;
     var ah = screen.availHeight;
     window.moveTo(0, 0);
     window.resizeTo(aw, ah);
}
</script>
</html>
 
三、    参考文件
源代码

posted @ 2005-06-17 13:36 surprise 阅读(11931) | 评论 (62)编辑

2005年5月20日

Sql Server 中image类型迁移到Oracle 中Blob类型出现图片显示不出来,why????请博客们帮忙

我现在在一项目中碰到这么一个问题
Sql Server 中image类型迁移到Oracle Blob类型出现图片显示不出来,我在Sql Server 中看了一条image数据
如下:
1。Sql Server中
select datalength(d.photo) from drivers d where d.Name like '%陆斌%'
输出如下
132727

select d.photo from drivers d where d.Name like '%陆斌%'
输出如下
0x151C32000200000012000C0014002600FFFFFFFF50686F746F20456469746F7220D5D5C6AC004D5350686F746F45642E330001050000020000000C0000004D5350686F746F45642E33000000000000000000005E0100D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000

2。Oracle中
select DBMS_LOB.getlength(d.photo) from drivers d where d.Name like '%陆斌%'
输出如下
132727

select d.photo from drivers d where d.Name like '%陆斌%'
输出如下
0x151C32000200000012000C0014002600FFFFFFFF50686F746F20456469746F7220D5D5C6AC004D5350686F746F45642E330001050000020000000C0000004D5350686F746F45642E33000000000000000000005E0100D0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000

迁移的数据是一模一样都是16进制但在显示时图片就是显示不出来,为什么???好郁闷呀

posted @ 2005-05-20 11:04 surprise 阅读(1738) | 评论 (2)编辑

2005年4月19日

在C#中存储Blob类型的数据,

我现在在Oracle中写了个存储过程如下:
create or replace procedure update_student_clob(
     v_cmid     in number,     --表的主键ID
     v_geometry  in blob --新的图形对象
    )
is
    lobloc  blob;
     query_str  varchar2(1000);
begin
--取出blob对象
   query_str :='select SPHOTOfrom student where STUDENTID= :id for update ';
   EXECUTE IMMEDIATE query_str INTO lobloc USING v_cmid;
   --更新
   dbms_lob.write(lobloc, utl_raw.length(v_geometry),1, v_geometry);
 
   commit;
end;

在C#中的代码部分如下:
1.数据层
public override void  RunProcedure(string storedProcName,OracleParameter[] parameters)

  {
   cmd.CommandText=storedProcName;//声明存储过程名

   cmd.CommandType=CommandType.StoredProcedure;

   foreach(OracleParameter parameter in parameters)

   {
    cmd.Parameters.Add(parameter);
   }

   cmd.ExecuteNonQuery();//执行存储过程

  }


2.商业层
//用于存储照片,StuEntity 为实体类
public void AddStudent(StuEntity p_Entity)
  {
   DataAccess.DBOperator m_Ora = DBOperator.CreateKgInstance();
   try
   {
    //fs为创建文件流
    FileStream fs=new FileStream(p_Entity.photo,FileMode.OpenOrCreate);
    //创建了二进制数组
    byte[] blob = new byte[fs.Length];
    fs.Read(blob, 0, blob.Length);
    fs.Close();
    //studid为主键
    string m_Sql="update student set sphoto=empty_blob() where STUDENTID=1";
    m_Ora.Execute(m_Sql);
    SpExeFor(1,blob);
   }
   catch(Exception ex)
   {
    throw ex;
   }
   finally
   {
    m_Ora.Close();
   }
  }

  public void SpExeFor(int p_Studid,byte[] p_Blob)

  {
   DataAccess.DBOperator m_Ora = DBOperator.CreateKgInstance();
   try
   {
   //存储过程的参数声明
   OracleParameter[] parameters={
            new OracleParameter("v_cmid",OracleType.Int32),
            new OracleParameter("v_geometry",OracleType.Blob,p_Blob.Length),
           };
    parameters[0].Value=p_Studid;
    parameters[1].Value=p_Blob;
    m_Ora.RunProcedure("update_student_clob",parameters);
   }
   catch(Exception e)
   {
    throw e;
   }
   finally
   {
    m_Ora.Close();
   }
  } 

posted @ 2005-04-19 14:38 surprise 阅读(5251) | 评论 (7)编辑

2005年3月15日

windows 2000下最多可以承受有多大容量外存????

我现在在一台hp服务器上装了windows 2000,用了四个72.8G大的硬盘,但怎么装都只能有208G,请拿位博客告诉我这是为什么????



dudu不好意思,事情紧急明天我会移到其他区域的

posted @ 2005-03-15 12:51 surprise 阅读(2776) | 评论 (6)编辑

2004年11月17日

如何使用一个不错的图表组件WebChart(免费)

  在上次灵感之源介绍了一些免费的组件,这次公司正派上用处真的很感谢。说起用WebChart组件真的很简单,并且效果也不错。现在就让我简单介绍怎么使用和一些注意点:
1.首先创建项目MyWebChart

 

2.添加组件于工具箱

       进入项目后在工具箱中右击鼠标,单击“添加/移除项”,进入“自定义工具箱”,单击“浏览”按钮,找到WebChart.dll文件,在ChartControl组件名称上打钩,单击“确定”。





在工具箱的“Web窗体”中就出现了ChartControl组件

 

3.使用组件

  ChartControl组件拖入设计窗体


这样一个简单ChartControl组件的框图出现了

 

4.写代码

       首先在代码的最前面添加 

using WebChart;

接着在private void Page_Load(object sender, System.EventArgs e)添加代码

private void Page_Load(object sender, System.EventArgs e)

         {

              Chart c = new AreaChart();

              c.Data.Add( new ChartPoint("Ene", 123));

              c.Data.Add( new ChartPoint("Ene", 33));

              c.Data.Add( new ChartPoint("Ene", 23));

              c.Line.Color = Color.Blue;

              ChartControl1.Charts.Add( c );

              ChartControl1.RedrawChart();

       }

 

5.编译与运行

       好了一切准备就绪,开始运行

 

怎么会出现错误的,这个错误一开始确实让我觉得头疼,我到了一些相关网站特别是官方网站,找了半天没结果,但最后在帮助文件末尾上才知道,在项目中需要建立一个WebCharts的目录,接着我按照帮助文件的要求建立了,再一次编译运行。

    啊怎么又有错了,开始感到郁闷了以为这组件是不能用的呢?

  接着又看起了帮助文件,在帮助文件最后一句写到“IF you find an exception of Generic Error GDI+ .... then it means the folder is there, but the user (ASPNET or whatever user you are using) do not have write permissions on the folder。”这才明白,如果你的系统盘是NTFS格式的需要在WebCharts目录下添加aspnet的用户权限。我照着它的意思做了,哇成功了,太棒了。




效果不错吧,并且用这控件还有好多属性让你使用,使的界面更直观更好看。

下载地址:http://www.carlosag.net/Tools/WebChart/Default.aspx

posted @ 2004-11-17 06:35 surprise 阅读(7588) | 评论 (24)编辑

太爽了博客园有论坛了?

在论坛中还开篇了开源,太好了俺喜欢

posted @ 2004-11-17 06:07 surprise 阅读(1005) | 评论 (0)编辑