posts - 6,  comments - 2,  trackbacks - 0
对于数字、字符、中文等等的验证,网上已经数不胜数,小弟实在不想重复,小弟想要说的是在最近发现的一个问题,希望能为或许正在为难的人提供些许帮助。

用户需求
多个输入框,没有输入到最后一个时,敲击回车键,跳到下一个文本框,如果是最后一个文本框,敲击回车键则提交表单。

解决方法
前面的跳跃,相信大家都比较了解了,响应onkeydown事件或者onkeyup事件(根据需求选择),调用nextFocus()方法。

function nextFocus()
{
if (event.keyCode ==13)
  {
       event.keyCode  
= 9
  }
}

最后一个文本框,当我们敲击回车键时,响应onkeydown事件或者onkeyup事件(根据需求选择),调用submitform()方法。

function submitform()
{
  
//用户亦可在此方法中加入适当的客户端数据验证代码。
  if (event.keyCode ==13)
  {
    
//tijiao是按钮的名称,按钮类型为submit
    document.form.tijiao.focus();
  }
}



有些用户可能要为,为什么不使用
document.form.submit();
其实是这样的,该方法在onkeydown事件触发后的方法中调用会产生2次提交。当然我尝试了一些机器,根据系统好像也会有所不同,在xp sp2上好像是有这个问题。而采用上面的方法提交,则不会产生此问题。当然如果用户没有此特殊要求,大家还是不要如此做。

正常情况下,用户点击按钮进行提交,为了防止其重复提交可调用下面的js:
document.actionform.tijiao.disabled=true;
这样用户即无法多次提交了。
posted @ 2006-05-22 10:45 令狐葱 阅读(795) 评论(0) 编辑
在这首页新闻发布,会涉及到一些Flash与aspx文件之间接收和发送变量的基本原理。是动态Flash的基础。

1、首先是在"图层1"(命名为"框架")上打好首页的新闻公布的框,这个是Flash的基础,我就不展开了,只要是框的样子便可。

2、然后,新建"图层2"(命名为"变量框")添加两个用来显示内容的动态文本。变量名分别设为news和time。一个用来显示新闻的内容,一个用来显示发布的时间。

3.新建一层action图层,此为本讲的重点,Flash动态交互后台的精髓,可以浓缩在此帧上,我会详细的讲解其中的action语句。

4、在帧上加入下列action:

mainnews = new LoadVars();//注1 
mainnews.load("data.aspx");//注2
mainnews.onLoad = function(success) {//注3
if (success) {
news = mainnews.dnews; //注4
time = mainnews.dtime;
}else {
gotoAndPlay("fail"); //注5
}
}


注1:定义读取的函数
注2:定义了flash去哪里取数据,因为flash不能自身去数据库去取数据,而是要通过这个aspx文件来取数据.所以,从数据库里取数据的工作,其实是由后台的aspx文件负责的。Flash只是把aspx从数据库取出来的资料“拿来”,放在自已身上已显示出来。这里我打个比方:数据库好比硬盘,aspx文件是CPU,Flash是显示器.当aspx文件从数据库里拿出资料,再交给flash来显示给大家看。
注3:这个函数是实际的mainnews去读取data.aspx文件的行为。判断是否成功。
注4:如果成功,即成功收到来自aspx的变量,把mainnews取来的dnews变量赋值给news变量,也是我们前面设置过的动态文本。其中dnews其实是aspx里的变量,是mainnews接收到的。
注5:如果失败,即没有收到aspx给出的变量.去跳到帧标签为“fail”的部分。由于篇幅的关系。我也就不展开了。

Flash部分就这样完成了.然后便是后台aspx去数据库取变量的过程了。
这次我是用asp.net+access完成的,如果学过asp 或PHP的朋友可做适当的语法调整便可,因为原理是一样的。
5、新建一个data.mdb文件,即access的数据库(汗!总觉得自已在骗稿费似的)
创建一张名为main的表,添加字段"新闻"及字段"时间"。

6、接下来就是aspx文件的部分了,代码如下:

<%@ Page Language="C#" Debug="true"%>
<%@Import NameSpace="System.Data"%>
<%@Import NameSpace="System.Data.OleDb"%>
<%
string StrCon="Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("data.mdb");
string strSQL="SELECT * FROM main order by 编号 desc";
OleDbConnection MyConnection=new OleDbConnection(StrCon);
OleDbCommand myCommand=new OleDbCommand(strSQL,MyConnection);
OleDbDataReader myDataReader=null;
myCommand.Connection.Open();
myDataReader=myCommand.ExecuteReader();
myDataReader.Read();
Response.Write("dnews="+myDataReader["新闻"].ToString()); //注6
Response.Write("&dtime="+myDataReader["更新时间"].ToString());
myCommand.Connection.Close();
%>


注6:这段是一个很简单的读取数据库行为,学过asp.net应该都看的懂吧,会asp的朋友也应该不难理解。但aspx是怎么把取到的数据传给flash的呢?对!就是这句话,其实说穿了也很简单的。只不过在data.aspx上打出"dnews=****"。大家注意,"dnews"是不是很眼熟呢?其实它就是注4中"dnews",aspx把它打出来,flash自已去会来拿了。同理,dtime也是一样,不过在dtime前面要加一个"&"符号.因为它规定了,dtime是新的变量,如果第三个也是一样。其实就是变量间的分隔符。
EN,首页的新闻就这样完成了。

=========================================
光光读新闻怎么行,总不能一直通过手工修改数据库来加新闻吧。下面来做个在线添加新闻的东东吧。

1、还是打好框个输入文本,变量设为addnews.再加一个按钮

1、还是打好框个输入文本,变量设为addnews.再加一个按钮

2、添加一个动态文本,没"实例名称"为addresult,注意是实例名称而不是变量

3、在"确定"按钮上做如下Action:

on (release) {
addn = new LoadVars(); //发送的变量
load_var = new LoadVars();  //接收的变量
addn.addnews = addnews; //注7
addn.sendAndLoad("addnews.aspx",load_var,"self"); //注8
load_var.onLoad = function(success) { //注9
if (success) {
addresult.text = "添加成功";
}else{
addresult.text = "添加失败";
}
}
}


注7:将addnews的变量赋值给add.addnews它会把addnews传给aspx文件。再通过aspx文件添加到数据库.
注8:add.sendAndLoad,这是一个add的行为,作用是发送add.addnews的变量给"addnews.aspx"这个文件.接着,aspx会给出是否成功操作的讯号.将这个讯号反传给load_var.这是我们在aspx文件需要加入的,后面在aspx文件部份,我会详细讲一下。
注9: load_var收取行为,如果添加成功就可收到讯号,addresult实例将会提示成功,反之提示失败。

4、数据库不变,还是用刚才那个。新建add.aspx文件,做为添加新闻的工具。代码如下:

<%@ Page Language="C#" Debug="true"%>
<%@Import NameSpace="System.Data"%>
<%@Import NameSpace="System.Data.OleDb"%>
<%
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+ Server.MapPath("data.mdb"));
OleDbCommand myCommand = new OleDbCommand("insert into main (新闻,更新时间) values (" + Request ["addnews"] + ", " + DateTime.Now.ToString() + ")" , myConnection); //注10
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
Response.Write("res=ok");  //注11
%>


注○10:也是一个简单的添加记录到mdb的aspx文件。关键在于Request ["addnews"],其实和aspx之间传递变量一样,通过Request函数aspx文件就可以接收到flash里addn.addnew的变量了。
注11:在aspx打出res=ok,让flash接收,便其知道操作成功.
posted @ 2006-05-20 17:40 令狐葱 阅读(2036) 评论(1) 编辑
 

介绍

在很多情况下,我们需要把图片保存到数据库中。在某些应用程序中,存在一些敏感信息不能被存储到文件系统中,因为存储在文件系统上的任何图片都很容易被用户非法获得。

本文将讨论在ASP.NET中怎样把图片保存到SQL SERVER数据库中。

在本文中我们将了解到以下几方面的内容:

l         上载图片文件的要求

l         使用Strem对象

l         获得上载图片大小和类型

l         如何使用InputStream方法?

上载图片文件的要求

在开始上载前我们需要作两件重要的事情

#Form标记的enctype属性需要被设置为如下形式:

enctype="multipart/form-data"

#提供一个让用户选择图片文件的Html控件:

<input type=file>

#还要引用System.IO命名空间来处理Strem对象

上述的三项都要应用到aspx页中。在SQL SERVER中还有以下的一些要求:

#一个至少有一个字段类型为Image的表

#另外有一个用来存储图片类型的Varchar类型的字段就更好了

那么,我们有了一个有Image字段类型的数据表和一个<input type=file>(HTML文件控件)。我们还需要一个提交按钮,当用户选择好图片后可以点击它。在按钮的OnClick事件中我们要获得图片文件的内容并最终把它插入到数据表中。让我们来看看按钮的OnClick事件,它读取图片并把图片插入到数据表中。

提交按钮的OnClick事件代码

 

  Dim intImageSize As Int64
    
Dim strImageType As String
    
Dim ImageStream As Stream

    
' Gets the Size of the Image
    intImageSize = PersonImage.PostedFile.ContentLength

    
' Gets the Image Type
    strImageType = PersonImage.PostedFile.ContentType

    
' Reads the Image
    ImageStream = PersonImage.PostedFile.InputStream

    
Dim ImageContent(intImageSize) As Byte
    
Dim intStatus As Integer
    intStatus 
= ImageStream.Read(ImageContent, 0, intImageSize)

    
' Create Instance of Connection and Command Object
    Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("ConnectionString"))
    
Dim myCommand As New SqlCommand("sp_person_isp", myConnection)

    
' Mark the Command as a SPROC
    myCommand.CommandType = CommandType.StoredProcedure

    
' Add Parameters to SPROC
    Dim prmPersonImage As New SqlParameter("@PersonImage", SqlDbType.Image)
    prmPersonImage.Value 
= ImageContent
    myCommand.Parameters.Add(prmPersonImage)

    
Dim prmPersonImageType As New SqlParameter("@PersonImageType", SqlDbType.VarChar, 255)
    prmPersonImageType.Value 
= strImageType
    myCommand.Parameters.Add(prmPersonImageType)

    
Try
        myConnection.Open()
        myCommand.ExecuteNonQuery()
        myConnection.Close()
        Response.Write(
"New person successfully added!")
    
Catch SQLexc As SqlException
        Response.Write(
"Insert Failed. Error Details are: " & SQLexc.ToString())
    
End Try


它是如何工作的?

对象PersonImage HTMLInputFile 控件。首先我们要获得被插入图片的大小,通过如下方法实现:

intImageSize = PersonImage.PostedFile.ContentLength

接着要通过ContenType属性获得图片类型。最后最重要的是要获得图片文件流,通过如下方法实现:

ImageStream = PersonImage.PostedFile.InputStream

我们有一个byte数组ImageContent,准备用来保存图片内容。整个图片通过Stream对象的Read方法读取,这个方法有三个参数,即:

#被复制的图片内容的目标位置

#读的开始位置

#需要被读的子节数

读声明如下:

intStatus = ImageStream.Read(ImageContent, 0, intImageSize)

现在,我们读取了整个图片内容。接着我们需要把图片内容插入SQL数据表中,我们将用用一个存储过程把图片类型和图片插入SQL数据表。如果你看过上面的代码清单,你就知道我们把数据类型设置为SqlDbType.Image.就这样,我们成功地把图片保存到了SQL SERVER数据库。

例子的输出样例

图:将图片保存到sql server 数据库

测试下面的代码

代码下载

点击这里下载ASPX页

点击这里下载存储过程

总结

posted @ 2006-05-19 17:04 令狐葱 阅读(287) 评论(0) 编辑

通常,SQL 语句和存储过程包括运行时计算的参数。使用参数编写的 SQL 语句称作参数化 SQL 语句。

使用 SqlDataSource 控件时,可以指定使用参数的 SQL 查询和语句。通过根据运行时计算的值读写数据库信息,这有助于提升数据绑定环境的灵活性。可以从各种源获取参数值。这些源包括 ASP.NET 应用程序变量、用户标识和用户选择的值。可以使用参数执行下列操作:提供用于数据检索的搜索条件;提供要在数据存储区中插入、更新或删除的值;提供用于排序、分页和筛选的值。

使用参数

同所有的数据源控件一样,SqlDataSource 控件在运行时接受输入参数,并在参数集合中对参数进行管理。每一项数据操作都有一个相关的参数集合。对于选择操作,可以使用 SelectParameters 集合;对于更新操作,可以使用 UpdateParameters 集合,依此类推。

可以为每个参数指定名称、类型、方向和默认值。对于从特定对象(例如,控件、会话变量或用户配置文件)获取值的参数,需要设置其他属性。例如,ControlParameter 要求设置 ControlID 以标识要从中获取参数值的控件,以及设置 PropertyName 属性以指定包含参数值的属性。有关更多信息,请参见对数据源控件使用参数

另外,SqlDataSource 控件将基于支持自动更新、插入和删除操作的数据绑定控件(例如 GridViewFormView 控件)所传递的值自动创建参数。有关更多信息,请参见数据源控件如何为数据绑定字段创建参数

在命令中指定参数

使用 SqlDataSource 控件时,可以将该控件的命令属性设置为参数化 SQL 语句或存储过程的名称。如果指定命令的存储过程,必须将该命令的命令类型指定为 StoredProcedure

参数名称

SqlDataSource 控件可以将 ParameterPrefix 属性的值添加到所有参数名称的开头。‎(默认的前缀为“@”。)

如果 GridView 控件等数据绑定控件绑定到 SqlDataSource 控件,在执行更新或删除操作期间,该数据绑定控件会同时将当前记录值和原始记录值传递到 SqlDataSource 控件。当前值传递到 Values 字典中。原始值传递到 KeysOldValues 字典中。对于给定的数据操作,这些字典的内容将会追加到基础 DbCommand 对象的 Parameters 集合中。

SqlDataSource 控件的 SQL 命令中,使用命名约定使参数占位符与传递到该命令的原来的值相匹配。通过设置 SqlDataSource 控件的 OldValuesParameterFormatString 属性,可以建立该占位符名称的格式。将 OldValuesParameterFormatString 属性设置为一个字符串。该字符串包含的“{0}”是该字段名称的占位符。例如,如果将 OldValuesParameterFormatString 属性设置为“old_{0}”,原始值参数的名称将会解析为前缀为“@old_”的字段名称。考虑对名为 LastModifiedDate 的字段执行更新操作。该字段的当前值传递到 Values 字典中,而该字段的原始值传递到 OldValues 字典中。此时,将会创建名为 @LastModifiedDate 参数,用来传递当前值,同时会创建名为 @old_LastModifiedDate 参数,用来传递原始值。此后,可以将这两个参数都包括在 SQL 语句中,以便区别该字段的当前值和原始值,如以下示例所示:

UPDATE Table1 SET LastModifiedDate = @LastModifiedDate
  WHERE Key = @Key AND LastModifiedDate = @old_LastModifiedDate

执行开放式并发检查或使用可以修改主键的数据源时,必须可以分隔命令中的当前值和原始值。

有关数据绑定控件传递的字典的更多信息,请参见数据源控件如何为数据绑定字段创建参数

对 SqlClient 提供程序使用参数

默认情况下,SqlDataSource 控件通过 System.Data.SqlClient 数据提供程序将 SQL Server 用作数据源。System.Data.SqlClient 提供程序支持作为占位符的命名参数,如以下示例所示:

SELECT * FROM Employees WHERE LastName = @LastName 
  AND FirstName = @FirstName

使用命名参数,在命令的参数集合中指定参数的顺序并不重要。但是,必须确保在 SQL 命令中使用的参数名称与相关集合中的参数名称相对应。

下面的示例演示如何将 SQL 命令中的命名参数用于使用 System.Data.SqlClient 提供程序的 SqlDataSource 控件。

<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
                 SELECT @EmpID = SCOPE_IDENTITY()"
  UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName 
                   WHERE EmployeeID=@EmployeeID"
  DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

  ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
  OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
  RunAt="server">
  
  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>
  
  <InsertParameters>
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
  </InsertParameters>

</asp:sqlDataSource>
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
                 SELECT @EmpID = SCOPE_IDENTITY()"
  UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName 
                   WHERE EmployeeID=@EmployeeID"
  DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

  ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
  OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
  RunAt="server">
  
  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>
  
  <InsertParameters>
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
  </InsertParameters>

</asp:sqlDataSource>

对 OleDb 和 Odbc 提供程序使用参数

如果要连接到 OLE 数据库或 ODBC 数据源,可以对 SqlDataSource 控件进行配置,使其通过 System.Data.OleDbSystem.Data.Odbc 提供程序分别使用数据源。System.Data.OleDbSystem.Data.Odbc 提供程序只支持由“?”字符标识的定位参数,如以下示例所示:

SELECT * FROM Employees WHERE LastName = ? AND FirstName = ?

System.Data.OleDbSystem.Data.Odbc 提供程序与参数化 SQL 语句结合使用时,参数占位符的指定顺序必须与相关参数集合中的参数顺序匹配。可以控制参数的顺序,方法是在执行相关数据操作的集合(如相关 UpdateCommandUpdateParameters 集合)中显式指定这些参数。为通过数据绑定控件传递的值自动创建的参数显式创建参数集合时,显式创建的参数将会改写自动生成的所有参数。这样,可以确保参数按照所需的顺序进行传递。

Note注意

默认情况下,数据绑定控件中基于绑定字段的参数将按照下列顺序从参数字典添加到命令中:ValuesKeysOldValues。对于删除操作,只使用 Keys 字典。对于插入操作,只使用 Values 字典。有关数据绑定控件传递的字典的更多信息,请参见数据源控件如何为数据绑定字段创建参数

下面的示例演示如何为使用 System.Data.OleDb 提供程序的 SqlDataSource 控件指定参数。为了确保集合中的参数顺序与 SQL 语句中占位符的顺序匹配,可以显式指定这些参数。

<Fields>                  
  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/>                    
  <asp:BoundField DataField="FirstName"  HeaderText="First Name"/>
  <asp:BoundField DataField="LastName"   HeaderText="Last Name"/>                    
  <asp:TemplateField HeaderText="Birth Date">
    <ItemTemplate> 
      <asp:Label ID="BirthDateLabel" Runat="Server" 
                 Text='<%# Eval("BirthDate", "{0:d}") %>' />
    </ItemTemplate>
    <InsertItemTemplate>
      <asp:Calendar ID="InsertBirthDateCalendar" Runat="Server"
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </InsertItemTemplate>
    <EditItemTemplate>
      <asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
                    VisibleDate='<%# Eval("BirthDate") %>'
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </EditItemTemplate>
  </asp:TemplateField>                    
</Fields> 
<Fields>                  
  <asp:BoundField DataField="EmployeeID" HeaderText="Employee ID" InsertVisible="False" ReadOnly="true"/>                    
  <asp:BoundField DataField="FirstName"  HeaderText="First Name"/>
  <asp:BoundField DataField="LastName"   HeaderText="Last Name"/>                    
  <asp:TemplateField HeaderText="Birth Date">
    <ItemTemplate> 
      <asp:Label ID="BirthDateLabel" Runat="Server" 
                 Text='<%# Eval("BirthDate", "{0:d}") %>' />
    </ItemTemplate>
    <InsertItemTemplate>
      <asp:Calendar ID="InsertBirthDateCalendar" Runat="Server"
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </InsertItemTemplate>
    <EditItemTemplate>
      <asp:Calendar ID="EditBirthDateCalendar" Runat="Server"
                    VisibleDate='<%# Eval("BirthDate") %>'
                    SelectedDate='<%# Bind("BirthDate") %>' />
    </EditItemTemplate>
  </asp:TemplateField>                    
</Fields> 

请参见

posted @ 2006-05-18 11:19 令狐葱 阅读(1248) 评论(0) 编辑
摘要: Jayesh Patel、Bryan Acker、Robert McGovernInfusion Development适用于:Microsoft ASP.NET 2.0Microsoft ADO.NET 2.0Microsoft Visual Studio 2005摘要: ASP.NET 2.0 通过增加一些支持数据的控件,从而减少了执行普通的数据访问任务所需的代码数量。本文介绍这些新增控件,以...阅读全文
posted @ 2006-05-18 10:38 令狐葱 阅读(479) 评论(0) 编辑
  1. http://www.fckeditor.net/download/default.html下载FCKeditor 2.1.1和FCKeditor.Net两个压缩包。
  2. 把FCKeditor 2.1.1解压到工程目录下的FCKeditor文件夹,FCKeditor.Net解压出来的FredCK.FCKeditorV2.dll放到BIN目录下。
  3. FCKeditor文件夹只保留以下内容:
  4. 修改fckconfig.js文件的FCKConfig.LinkBrowserURL,FCKConfig.ImageBrowserURL和FCKConfig.FlashBrowserURL,注释掉原来的语句,取消ASP.NET的注释。
  5. 在工具栏中添加FredCK.FCKeditorV2.dll控件,拖到页面中,设置BasePath为“~/FCKeditor/”
posted @ 2005-11-24 10:07 令狐葱 阅读(779) 评论(1) 编辑
仅列出标题