Posts Tagged ‘数据’

重新认识表格和一个访问无障碍的数据表格例子

星期三, 06月 4th, 2008

除特别说明外,本站内容采用创作共用授权署名和非商业用途,请尊重劳动成果.

表格一直是网页设计制作过程中一个重要de组成部分,在没学习CSS布局前,大多是用来布局de,但到目前位置发现居然还没真正地了解和完全掌握表格,不得不需要重新认识表格……

在现代网页设计制作中,表格主要de用途应该是用来存放多元二维数据.和表格相关de标签有 table、tr、td、th、tbody、thead、tfoot、col、colgroup、caption,如何合理地应用这些标签呢?先从名词解释开始.

名词解释

table

显示二维数据

tr

表格中de一行

td

数据单元格

th

表头单元格,定义一行或者一列de表头信息,不能使用在布局表格里.

tbody

表格中de某一行或者多行编成组,要结合thead、tfoot一起使用

thead

将表格中de某一行或者多行编成组,要结合tbody、tfoot一起使用

tfoot

将表格中de某一行或者多行编成组,要结合tbody、thead一起使用

col

列,给某一列或者几列应用特定de属性,结合colgroup一起使用

colgroup

列de组合,结合col一起使用

caption

定义表格de标题,在表格开始de地方使用,仅一次

summary

说明表格de用途

例子:

<table summary=”这是一个具有亲和力de表格de演示” id=”demotab”>

<caption>

访问 <a href=”http://www.forest53.com”>www.forest53.com</a> 浏览器统计

</caption>

<thead>

<tr>

<th>浏览器 / 月 </th>

<th>2005 / 11 </th>

<th>2006 / 04 </th>

<th>2006 / 05 </th>

</tr>

</thead>

<tfoot>

<tr>

<th>总计</th>

<td>1,646 ( 98.45% )</td>

<td>6,978 ( 99.48% ) </td>

<td>5,366 ( 99.56% ) </td>

</tr>

</tfoot>

<tbody>

<tr>

<th>Internet Explorer</th>

<td>1,535 (91.81%)</td>

<td>5,905 (86.41%)</td>

<td>4,550 (84.42%)</td>

</tr>

<tr>

<th>Firefox</th>

<td>98 (5.86%)</td>

<td>746 (10.92%)</td>

<td>640 (11.87%)</td>

</tr>

<tr>

<th>Opera</th>

<td>13 (0.78%)</td>

<td>147 (2.15%)</td>

<td>176 (3.27%)</td>

</tr>

</tbody>

</table>

C#(.NET)数据访问连接、查询、插入等操作的封装类

星期二, 06月 3rd, 2008

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Public de摘要说明
/// </summary>
public class PublicClass
{ //定义一个公用成员
public SqlConnection conn;
public PublicClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 建立数据库连接
public void OpenConn()
{
String strconn = System.Configuration.ConfigurationManager.AppSettings["sqlconn"].ToString();
conn = new SqlConnection(strconn);
if (conn.State.ToString().ToLower() == “open”)
{
//连接为打开时
}
else
{
//连接为关闭时
conn.Open();
}
}
#endregion
#region 关闭并释放连接
public void CloseConn()
{
if (conn.State.ToString().ToLower() == “open”)
{
//连接为打开时
conn.Close();
conn.Dispose();
}
}
#endregion
#region 返回DataReader,用于读取数据
public SqlDataReader DataRead(string sql)
{
OpenConn();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
#endregion
#region 返回一个数据集
public DataSet MySqlDataSet(string Sql, string tableName)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(Sql, conn);
da.Fill(ds, tableName);
CloseConn();
return ds;
}
#endregion
//返回一个数据集
public DataView MySqlDataSource(string Sql)
{
OpenConn();
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter(Sql, conn);
da.Fill(ds, “temp”);
CloseConn();
return ds.Tables[0].DefaultView;
}
#region 执行一个SQL操作:添加、删除、更新操作
//执行一个SQL操作:添加、删除、更新操作
public void MySqlExcute(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
cmd.Dispose();
CloseConn();
}
#endregion
#region 执行一个SQL操作:添加、删除、更新操作,返回受影响de行
//执行一个SQL操作:添加、删除、更新操作,返回受影响de行
public int MySqlExecuteNonQuery(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
int flag = cmd.ExecuteNonQuery();
return flag;
}
#endregion
public object MySqlExecuteScalar(string sql)
{
OpenConn();
SqlCommand cmd;
cmd = new SqlCommand(sql, conn);
object obj = cmd.ExecuteScalar();
cmd.Dispose();
CloseConn();
return obj;
}
/// <summary>
/// 返回DataTable对象
/// </summary>
/// <param name=”sql”>sql语句</param>
/// <returns></returns>
public DataTable MySqlDataTable(string sql)
{
OpenConn();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds, “table”);
CloseConn();
return ds.Tables["table"];
}
/// <summary>
/// 返回一个数据集de记录数
/// </summary>
/// <param name=”sql”>传递desql语句必须为一个统计查询</param>
/// <returns></returns>
public int MySqlRecordCount(string sql)
{
//注:Sql 语句必须是一个统计查询
OpenConn();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = sql;
cmd.Connection = conn;
SqlDataReader dr;
dr = cmd.ExecuteReader();
int RecordCount = -1;
while (dr.Read())
{
RecordCount = int.Parse(dr[0].ToString());
}
CloseConn();
return RecordCount;
}
/// <summary>
/// 自定义de功能警告
/// </summary>
/// <param name=”str”>弹出信息框内容</param>
public void SetAlert(string str)
{
HttpContext.Current.Response.Write(”<script language=’JavaScript’ type=’text/JavaScript’>alert(’” str “‘);</script>”);
}
//返回上一页
public void AddErro(string message)
{
HttpContext.Current.Response.Write(”<script>alert(’” message “‘);history.back(-1);</script>”);
}

//关闭窗口
public void SetCloseWindow()
{
HttpContext.Current.Response.Write(”<script language=’JavaScript’ type=’text/JavaScript’>window.close();</script>”);
}
/// <summary>
/// 地址跳转
/// </summary>
/// <param name=”str”>跳转地址</param>
public void SetLocation(string str)
{
HttpContext.Current.Response.Write(”<script language=’JavaScript’ type=’text/JavaScript’>location=’” str “‘;</script>”);
}

public string AjaxSetAlert(string str)
{
return “<script language=’JavaScript’ type=’text/JavaScript’>alert(’” str “‘);</script>”;
}
//过滤非法字符
public string FilterStr(string Str)
{
Str = Str.Trim();
Str = Str.Replace(”*”, “”);
Str = Str.Replace(”=”, “”);
Str = Str.Replace(”/”, “”);
Str = Str.Replace(”$”, “”);
Str = Str.Replace(”#”, “”);
Str = Str.Replace(”@”, “”);
Str = Str.Replace(”&”, “”);
return Str;
}
//Md5加密算法
public string md5(string str)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, “md5″).ToLower().Substring(0, 12);
}
public string RndNum(int VcodeNum)
{
string Vchar = “0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,W,X”;
string[] VcArray = Vchar.Split(new Char[] { ‘,’ }); //将字符串生成数组
string VNum = “”;
int temp = -1;
Random rand = new Random();
for (int i = 1; i < VcodeNum 1; i )
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(31); //数组一般从0开始读取,所以这里为31*Rnd
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum = VcArray[t];
}
return VNum;
}
}

在asp.net中操作sql server数据库的一些小技巧

星期二, 06月 3rd, 2008

1.给数据库语句参数传递

向数据库操作语句传递参数可以通过存储过程实现,这里给出另外两种简便易捷de方法:

可以在C#中通过字符串操作将参数直接传入SQL语句变量中,例如:

string s=”Davolio”;

string sql= “select * from employees where LastName=” “‘” s “‘”

相当于写入SQL语句:

select * from employees where LastName=’Davolio’
也可以通过thisCommand.Parameters.Add()方法实现,如下所示:

string s=”Davolio”;


SqlConnection thisConnection=new SqlConnection

(”Data Source=(local);Initial Catalog=Northwind;UID=sa;PWD=”);

thisConnection.Open ();

SqlCommand thisCommand=thisConnection.CreateCommand ();


thisCommand.CommandText =

” select * from employees where LastName=@charname“;

thisCommand.Parameters.Add(”@charname”,s);


可以看到,字符串s将参数“Ddbolio”传递给数据库操作语句中de参数charname.

2.将数据库中不同表内de数据读入到数据集DataSet中

SqlDataAdapterdeFill方法可以填充已知数据集,并且为每个填充项创建一个临时表,可以通过对该表de访问来读取数据集中de相关数据.其相关操作如下所示:


SqlConnection thisConnection=new SqlConnection

(”Data Source=(local);Initial Catalog=Northwind;UID=sa;PWD=”);

try

{

thisConnection.Open ();

}

catch(Exception ex)

{

thisConnection.Close ();

}

string sql1=”select * from employees”;

string sql2=”select * from Customers”;

SqlDataAdapter sda=new SqlDataAdapter(sql1,thisConnection);

DataSet ds= new DataSet();

sda.Fill(ds,”myemployees”);

sda.Dispose();

SqlDataAdapter sda1=new SqlDataAdapter(sql2,thisConnection);

sda1.Fill(ds,”myCustomers”);

sda1.Dispose();


string t1=ds.Tables["myemployees"].Rows[0]["Hiredate"].ToString();

string t2=ds.Tables["myCustomers"].Rows[0]["ContactTitle"].ToString();

Page.RegisterStartupScript(”aa”,”<script language=javascript>alert(’t1=” t1 “,t2=” t2 “‘);</script>”);


可以看到,在数据集ds中新生成了两个临时表“myemployees”和“myCustomers”.为验证这两个表中数据确实已读入数据集ds中,通过数据读取操作将表“myemployees”中对应于属性“Hiredate”de第一行赋值给字符型变量t1,将表“myCustomers”中对应于属性“ContactTitle”de第一行赋值给字符型变量t2,并通过JavaStript函数“alert()”将这些变量显示到弹出窗口中.Page.RegisterStartupScript方法用于发出客户端脚本块,其第一个参数为标志位,用户可以任意选取,第二个参数为JavaScript脚本,这里alert函数用来弹出MessageBox对话框,我将参数t1和t2传入该脚本中,使其在MessageBox中显示出来.

ps:由于网络速度太慢,不能将相关de显示图表传到服务器,真一大遗憾.还有不知道编写相关代码de样式和格式,使得给出de相关代码显得很零乱.

使用HttpWebRequest向网站模拟上传数据

星期二, 06月 3rd, 2008

最近有个朋友离开IT行业二年de朋友说要实现用程序向某个网站de页面上传数据,他是意思是每天有几十条数据要在网站页面上填写,很烦,最好用程序来写.网站页面是用POST传递de,同时没有验证码之类de东东,只有一点限制就是5分种内不能填写二次记录.这一切都好办.

using System.Web;
using System.Net;
using System.Text;
using System.IO;

//创建对某个网站页面de请求

HttpWebRequest myRequest = (HttpWebRequest )WebRequest.Create(”http://www.knowsky.com/a.asp“)

//上传de数据,”TextBox1“这些东东是网站页面里de控件ID,如果要上传多个值也是用&来分隔

string postData=”TextBox1=” this.textBox1.Text “&TextBox2=” this.textBox2.Text “
&TextBox3=” this.textBox3.Text “&TextBox4=” this.textBox4.Text;
ASCIIEncoding encoding=new ASCIIEncoding();
byte[] byte1=encoding.GetBytes(postData);//最终编码后要上传de数据
// Set the content type of the data being posted.
myRequest.ContentType=”application/x-www-form-urlencoded”;
myRequest.Method=”post”;//post上传方式
// Set the content length of the string being posted.
myRequest.ContentLength=postData.Length;
Stream newStream=myRequest.GetRequestStream();
newStream.Write(byte1,0,byte1.Length);


一切就OK了,如果您想上传后看到网站de内容de话,可以在程序里放一个IE控件,使用

axWebBrowser1.Navigate(”http://www.knowsky.com/a.asp“);
axWebBrowser1.Refresh2();

.NET中防止Access数据库下载

星期二, 06月 3rd, 2008

如何防止Access数据库下载是一个很老de话题了,网上de讨论也比较多.在这里只是探讨ASP.NET下防止Access数据库被下载de方法,有些是对以前方法de总结,部分是自己原创.其中可能有不完善甚至不正确de地方,欢迎大家指出,一同进步.

目前de解决方案主要有以下几种:

1. 把数据库文件放置到站点目录之外

2. 设置存放数据库文件deIIS目录权限为不可读取(IIS信息服务管理->选择需要设置目录->右键->属性->目录选项卡->取消读取复选框)

3. 采用ODBC数据源

以上三种方法都比较经典也比较安全,适合能对服务器直接操作de情况(因为三种方法都需要直接操作服务器进行设置),当然这也是ASP平台下防止Access被下载de解决方案.

ASP平台下还有一种解决办法,那就是在数据库中添加一个长二进制表,然后把文件后缀修改为.asp.(详情可参照动网论坛数据库de相应数据表)

4. 将您de Access 重命名 *.asax:因为 ASP.NET de处理机制中,默认情况下,对这样de请求是直接拒绝de,并不会有思归提到de解析过程耗费资源等问题.按照这个思路,其实还可以把 Access 重命名为 *.config,*.vb, *.cs 等等.

5. 将您de Access 放在您de应用程序根下 bin 目录(也就是您放置 DLL 文件de那个目录)中:已经发现,IIS 默认被配置为拒绝直接访问 bin 目录中de文件,用以保护对 DLL de请求,事实上也同时保护了放在 bin 目录中其他文件.但是对于这种方法,有人提出疑问: 会不会有这样de后果,数据库读写时会造成程序集被频繁de刷新,也会Session和Application不断丢失

6. (个人原创)另外一种方法是利用.NETde访问权限控制达到禁止匿名用户下载数据库de目de,具体如下:

打开配置文件Web.config,在configuration节点下添加如下一段配置:

<location path="DataBase">

<system.web>

<authorization>

<deny users="*" />

</authorization>

</system.web>

</location>

DataBase是您de数据库文件存放目录,如果是根目录则用<locateon path=”~/database.aspx”>替换即可.添加了上述配置后再把数据库后缀修改为.aspx等需要经过IIS解析de文件类型即可.

因为<deny users="*" />语句限制任何匿名用户访问路径path="DataBase"下de所有需要解析de文件.

注意:无论是ASP中还是.NET下,对于直接把Access数据库后缀直接改为.asp和.aspx,或者在文件名前面添加“#”或文件名中加入空格,用FlashGet照下不误.

asp.net中执行存储数据操作时数据被自动截取的一种情况

星期二, 06月 3rd, 2008

今天在做东西de时候,发现一个很奇怪de问题,数据库(SqlServer)中de字段设置de类型为ntext,但是保存de数据总是很短,开始以为在程序de某段设置了长度限制,在设置了断点跟踪调试发现穿递de数据很正常,但是在执行了存储操作以后保存de内容总是很短,数了数保存de字符个数为16个,数据库中设置de该字段类型ntextde长度也为16,于是想是不是数据库debug,就在查询分析器里写insert语句进行测试,结果发现保存de内容很正常,这样问题肯定在程序当中,最后检查到在构造SqlCommand命令对象de参数对象SqlParameter时指定de参数类型为ntext并且指定了其长度为16,写法如下

SqlParameter[] parms = new SqlParameter[] {
new SqlParameter(TEMPLATEID, SqlDbType.Int),
new SqlParameter(”@Content”, SqlDbType.NText,16)
};

把长度de限制去掉,再一测试,一切OK,呵呵,看来好多东西de概念不是很清楚是很容易造成麻烦问题de,希望这个教训能给我以后也遇到类似问题de朋友一点提示.

ASP.NET与MySQL数据库简明图示入门教程

星期二, 06月 3rd, 2008

  作者: CRYSTAL编译

  在ASP时代,如果我要建立一个数据库驱动deweb站点,那么您可以选择环很多钱de微软SQL SERVER数据库或者选择要花很多时间来寻找达到性能和稳定性统一deACCESS数据库,但在.NET时代您有另一种选择,那就是:MySQL数据库
  什么是MySQL数据库?
  MySQL数据库是一种开放源相关代码de数据库,通过获得授权来保持源相关代码de官方支持,同时可以自由修改源相关代码,目前许多公司和组织都采用了这种数据库.对此详细信息您可以访问MySQLde官方站点.
  第一步 下载和安装
  与大多数软件一样,首先是得到并安装mysql数据库软件,获得Mysql数据库de方很简单,在mysql.com/downloads/index.html”>http://dev.mysql.com/downloads/index.html . 上可以自由下载,本文采用de是Mysql4.1,当然读者也可以下在其他版本,不过我要推荐给读者de是最好下载预编译de二进制de文件.我de操作平台是Windwos XP,所以我选择de是包括安装文件deWindows版,这个版本大约35M,所以下载de时间不是很长,除非您de网络有问题.
  安装非常简单,按照安装步骤不会导致任何问题,如下图:


MySQL Server安装

MySQL Server安装

MySQL Server安装

MySQL Server安装

  如图所示,在安装完成de最后一步,系统会问您是否要配置MySQL服务器,如果选择现在配置MySQL服务器,那么系统将自动运行MySQL实例配置向导,于是您将进入下一步.

  第二步 配置
  MySQL服务器实例配置向导使配置服务器变得非常简单,按照配置向导一步一步de走,绝大多数时候都选择缺省配置.


MySQL服务器配置向导

MySQL服务器配置向导

  如上图,读者可以自行选择是安装在专用de数据库服务器上或是共享de服务器,由于我使用de笔记本电脑,所以我选择是最简单de”Developer Machine”,这个设置不能提供同样de性能,而且也不能使用很多系统资源

MySQL服务器配置向导—选择数据库de用途

MySQL服务器配置向导—指定TCP/IP和端口号

  必须确保响应TCP/IP网络协议,以保证Web页载需要de时候Web服务器能连接数据库;如果您de数据库和web服务器安装在同一台服务器上,那么可以禁用这个选项以防止来自网络de访问.
  MySQL服务器配置向导—设置默认字符串类型


MySQL服务器配置向导

MySQL服务器配置向导—安装服务

MySQL服务器配置向导—设置SQL连接密码

MySQL服务器配置向导—即将完成配置

  第三步 MySQL Administrator
  也许您认为可以不需要这个东西,但我还是要建议您下载并使用MySQL Administrator,它提供图形界面以帮助您管理MySQL数据库,Windows用户可以通过命令提示行运行MySQL Administrator,在余下时间里我假定您已经安装了MySQL Administrator,并且将使用相关图例.


MySQL Administrator主界面


  第四步 创建数据库
  要创建数据库,我必须首先连接服务器.运行MySQL Administrator并登陆服务器.


运行MySQL Administrator并登陆服务器


  选择MySQL Administrator左侧底部de”Catalogs”,然后在管理器de右侧会出现目前服务器上已经有de数据库目录,右击Schema窗口de”mysql“,选择”Create New Schema”.


创建一个新de数据库


  系统将提示您输入数据库de名称,这里我使用”mydatabase”,在本文以后也将使用这个名称.


输入数据库名称


  一旦创建后,新数据库就将与服务器中de其他数据库一起出现在Schema窗口,选择它后,在右侧窗口将出现它de详细资料.

完成新数据库de创建:


新de数据库创建完成了


  现在这里面还没有更多de东西,因为目前数据库还是空de.下面我就为数据库添加点东西.
  第五步 创建表
  创建表很简单,只需要点击”Create Table”按钮,于是将出现下面de对话框:


创建表


  如图所示,我已经给表取名为”mytable”,有四个域,其中id域为自动增量de主键、一个整数域、一个文本域和一个时间/日期域.
  在完成这些后,点击”Apply Changes”按钮,将出现如下图de窗口,窗口中de是创建表deSQL语句,同时询问是否执行,当然点击”Execute”.


确认并执行表中deSQL语句


  到目前为止,我已经创建了一个包含名为”mytable”de表de名为”mydatabase”de数据库,下面我要做de就是为数据库添加点数据.

  第六步 添加数据
  在真实情况中,添加数据是通过应用程序来实现de,但现在仅仅是要添加几个样本数据,所以我将在MySQL客户端命令中使用SQL语句deinsert语句来实现,如果现在您还在MySQL Administrator中,那么可以通过菜单”tools”来访问命令行(Tools -> MySQL Command Line Client),否则可以通过开始菜单deMySQL组来访问.


通过命令行语句来实现添加数据


  图中de第一行是告诉服务器我将使用那个数据库,第二和第三仅仅是简单de向数据库插入数据.
  现在数据表中有两个样本数据,到目前为止,我de数据库服务器已经建立并运行了,里面有一个数据库,一个数据表,一些数据.
  第七步 创建新deMySQL用户账号
  要添加用户账号需要再一次运行并登陆MySQL Administrator,在MySQL Administrator窗口de左边选择”User Administration”,同时右边将显示服务器现行账号de信息(这里通常是所谓deroot),右击下面小窗口里de账号,选择”Add new User”.


再次运行MySQL Administrator,并添加一个用户帐号


  接下来系统将提示您输入新用户de详细信息,我给新用户取名为”15secs”,口令设置为”password”.


设置用户名、密码等常规选项


  完成这些后,点击”Apply Changes”按钮以保存输入.
  第八步 给用户账号授权
  缺省状况下de新用户几乎什么都做不了,要允许新用户连接MySQL数据库必须在”Schema Privileges”中进行授权,这一切将在MySQL Administrator.中de”Schema Privileges”中完成.


为新开帐号设置权限


  注意上图还没有为用户进行任何授权,由于后面de相关代码需要查询数据库,故需要授予用户”select”权限,然后点击”Apply Changes”按钮保存.

进行授权:


进行授权


  也许应用程序需要更多de权限,如:”INSERT”, “UPDATE”, 和 “DELETE”等等,您可以用同样de方法授予给用户,但要注意de是,权限越多安全越小,您必须对每个用户都实行控制.

  第九步 ASP.NET页连接数据库服务器
  在.NET中连接MySQL数据库有两种方法:MySQL Connector/ODBC 和 MySQL Connector/Net,ODBC连接器是符合ODBC标准de交互平台,是.NET访问MySQL数据库de最好de选择.
  下载MySQL Connector/Net,然后直接安装,如下图:


MySQL Connector/Net安装图

MySQL Connector/Net安装图

MySQL Connector/Net安装图

MySQL Connector/Net安装图

  注意:我选择了register Connector/NET in the Global Assembly Cache,但我发现它已经被安装了,但我不能使用import语句,找不到Connector/NETde名称空间,直到将MySql.Data.dll文件拷贝到/bin目录下后才解决这个问题,系统报出de错误是:

BC30466: Namespace or type specified in the Imports ‘MySql.Data.MySqlClient’ cannot be found
  我相信这个问题依然存在,只能暂时用手工将文件从安装位置拷贝到相应de目录中,如:C:\Program Files\MySQL\MySQL Connector Net 1.0.4\bin\.NET 1.1\,拷贝到C:\Inetpub\wwwroot\bin\,就可以解决这个问题.
  第十步 示例程序
  至此我de数据库终于完成,MySQL Connector/Net也安装成功,我该做点其他什么事情了.下面我将提供一段简单de脚本,在这段脚本中,我将连接和查询数据库中de数据,输入数据不是脚本de要点. MySQL.aspx
<%@ Page Language=”VB” debug=”true” %>
<%@ Import Namespace = “System.Data” %>
<%@ Import Namespace = “MySql.Data.MySqlClient” %>
<script language=”VB” runat=”server”>
Sub Page_Load(sender As Object, e As EventArgs)
 Dim myConnection As MySqlConnection
 Dim myDataAdapter As MySqlDataAdapter
 Dim myDataSet As DataSet
 Dim strSQL As String
 Dim iRecordCount As Integer
 myConnection = New MySqlConnection(”server=localhost; user id=15secs; password=password; database=mydatabase; pooling=false;”)
 strSQL = “SELECT * FROM mytable;”
 myDataAdapter = New MySqlDataAdapter(strSQL, myConnection)
 myDataSet = New Dataset()
 myDataAdapter.Fill(myDataSet, “mytable”)
 MySQLDataGrid.DataSource = myDataSet
 MySQLDataGrid.DataBind()
End Sub
</script>
<html>
 <head>
  <title>Simple MySQL Database Query</title>
 </head>
<body>
 <form runat=”server”>
  <asp:DataGrid id=”MySQLDataGrid” runat=”server” />
 </form>
</body>
</html>

  在上面de脚本中黑体字部分将随您采用de平台不同而进行修改,如采用SQL Server应用System.Data.SQLClient来替换MySql.Data.MySqlClient,这只是一点,更详细de本文就不讨论了.下图是脚本运行结果:

脚本运行结果

  结论:
  我希望本文能对读者理解数据库服务器有所帮助,当您打算从access或SQL Server上升级de时候,MySQL是一个不错de选择,尽管它是开放源相关代码de,而且还有些缺陷,但它与.NETde结合能做许多工作,另外MySQL Administrator使管理数据库服务器不再是管理员de噩梦.

ASP.NET技巧:做个DataList可分页的数据源

星期二, 06月 3rd, 2008

  这个数据源,分两部分,一是从数据类中调出数据,然后在本数据源中对分页参数以及页面分页辅助控件进行操作!在前面有三个控件控制翻页,一个下拉列表,两个LinkButton!

  下面 fill() 方法调用很简单,在页面中要重新绑定de地方 写上 fill() 就可以了,呵呵!但是一定要写哦,例如翻页动作执行后!

  下面是db类中deds方法

public static DataTable ds(string que)
{//返回一个装载了SQL制定留言de数据表,
OleDbConnection con = odb.con();
OleDbDataAdapter oda = new OleDbDataAdapter();
oda.SelectCommand=new OleDbCommand(que,con);
DataSet ds = new DataSet();
oda.Fill(ds,”thc”);
return ds.Tables["thc"];
con.Close();
}下面方法使用de数据源就是上面de这个
private void fill()
{//做de一个方法,因为页内将有多次de绑定
//这里设置一个隐藏deLabel,用与储存当前de页索引
int cup = Convert.ToInt32(pagelbl.Text);

PagedDataSource ps = new PagedDataSource();//NEW一个分页数据源
ps.DataSource = odb.ds(”select * from guest order by id desc”).DefaultView;//送一个SQL语句进去,确定该数据源de数据源,有点绕吧,呵呵
ps.AllowPaging = true;//允许分页
ps.PageSize = 2;//设置页de数量
ps.CurrentPageIndex = cup-1;
if (!IsPostBack)
{//判断页面是否第一次载入
for (int i = 1; i <= ps.PageCount; i )
{//循环出页码
pageddl.Items.Add(i.ToString());
}
}
//下面主要是控制上下翻页按纽是否起用
pageup.Enabled = true;
pagedown.Enabled = true;
if (ps.IsFirstPage)
{//如果是最前页,上页按纽不可用
pageup.Enabled = false;
}
if (ps.IsLastPage)
{//如果是最后页,下页按纽不可用
pagedown.Enabled = false;
}
//设置页码下拉菜单当前选中de值
pageddl.SelectedItem.Text = cup.ToString();
//终于可以绑定给DataList了
DataList1.DataSource = ps;
DataList1.DataKeyField = “id”;
DataList1.DataBind();
}

  再下面是翻页事件de处理

protected void pageddl_SelectedIndexChanged(object sender, EventArgs e)
{//页码下拉菜单事件
pagelbl.Text = pageddl.SelectedItem.Text.ToString();
fill();
}
protected void pagedown_Click(object sender, EventArgs e)
{//下页事件
pagelbl.Text = Convert.ToString(Convert.ToInt32(pagelbl.Text) 1);
fill();
}
protected void pageup_Click(object sender, EventArgs e)
{//上页事件
pagelbl.Text = Convert.ToString(Convert.ToInt32(pagelbl.Text)-1);
fill();
}

在ASP.net中保存/取出图片入/从SQL数据库

星期二, 06月 3rd, 2008

一、把图片存入数据库中
用到以下几个方面de知识:
1. 使用流对象
2. 查找准备上传de图片de大小和类型
3.怎么使用InputStream方法

插入图片de必要条件
1.#Form 标记de enctype 属性应该设置成 enctype=”multipart/form-data”
2.# 需要一个<input type=file>表单来使用户选择他们要上传de文件,同时我需要导入 System.IO名称空间来处理流对象
对SqlServer做以下de准备
1.# 需要至少含有一个图片类型de字段de表
2.# 如果我还有另外一个变字符类型de字段来存储图片类型,那样会更好一些.

窗体控件
1.插入图片用到de是System.Web.UI.HtmlControls.HtmlInputFile控件,我在webform中放入这个控件,取名为“imgInput”
2.同时再放入一个确认上传按钮“Button1”

程序相关代码
AddImg,用于返回要上传de图片内容

1Private Function AddImg()Function AddImg(ByVal InputImg As System.Web.UI.HtmlControls.HtmlInputFile, ByVal ImgType As String, ByVal MaxSize As Int64) As Byte()
2′传入一个htmlinputfile控件,一个上传图片格式和一个上传图片最大值,返回图片de内容,既要写入数据库中de内容,您也可以同时写入图片类型
3 Dim intImageSize As Int64
4 Dim strImageType As String
5 Dim ImageStream As Stream
6 ‘ Gets the Image Type
7 strImageType=InputImg.PostedFile.ContentType
8 If strImageType <> ImgType Then
9 Response.Write(”<script>alert(’图片类型为”"‘)</script>”) ‘jgp类型为”image/pjpeg”
10 Exit Function
11 End If
12 ‘ Gets the Size of the Image
13 intImageSize = InputImg.PostedFile.ContentLength
14 If intImageSize > MaxSize Then
15 Response.Write(”<script>alert(’图片不得大于K’)</script>”)
16 Exit Function
17 End If
18 ‘ Reads the Image
19 ImageStream = InputImg.PostedFile.InputStream
20 Dim ImageContent(intImageSize) As Byte
21 Dim intStatus As Integer
22 intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
23 Return ImageContent
24 End Function
示例调用

Dim imageContent() As Byte
imageContent = AddImg(fileImg, “image/pjpeg”, 512000)’上传图片类型为jpg,最大不超过500K

插入数据库

我想这部分就不用写了吧,您可以用任何方式(推荐使用存储过程),将imageContent插入到数据库中类型为imagede字段就行了.

二、把图片从数据库中读出

这部分比较简单:

假设img变量是您从数据库中取出de图片内容
那么直接使用
Response.BinaryWrite(img)
就可以将图片输出到页面上了

三:总结

将图片存放在数据库中其实是起到了图片保护de作用,这样就算别人浏览您de机器也看不到您de图片,也可以用来保护重要de图片资料.

ASP.NET技巧:数据岛出到Excel最为简易的方法

星期二, 06月 3rd, 2008

只需将ContentType 设置为 “application/vnd.ms-excel”,表示以Excel方式输出.
相关代码如下:
DataToExcel.aspx:
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”DataToExcel.aspx.cs” Inherits=”DataToExcel” %>

<html xmlns=”http://www.w3.org/1999/xhtml“>
<head runat=”server”>
<title>DataToExcel</title>
</head>
<body>
<form id=”form1″ runat=”server”>
<asp:GridView ID=”GridView1″ runat=”server”>
</asp:GridView>
</form>
</body>
</html>DataToExcel.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class DataToExcel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.Response.ContentType = “application/vnd.ms-excel”;
string ConnStr = “server=localhost;uid=sa;pwd=;database=northwind”;
SqlConnection Conn = new SqlConnection(ConnStr);
Conn.Open();
string sqlcmd = “select lastname,firstname,title, address, city from employees”;
SqlCommand cmd = new SqlCommand(sqlcmd, Conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
}
}
}