C#获取文章类第一张图片的地址的函数(留着以后用),先说一下思路:

首先找到内容里面第一个<img标签的位置,然后找到从这个起的第一个>的位置,得到第一张图片的完整标签。

然后通过分隔空格得到图片的各个属性和属性值,提取src的值就是图片的地址

代码如下:

[CODE=csharp]
///

/// 获取文中图片地址
///

/// 内容 /// 地址字符串
public static string getImageUrl(string content)
{
int mouse = 0;
int cat = 0;
string imageLabel = “”;
string imgSrc = “”;
string[] Attributes;

do //得到第一张图片的连接作为主要图片
{
cat = content.IndexOf(“ mouse = content.IndexOf(‘>’, cat);
imageLabel = content.Substring(cat, mouse – cat); //图像标签

Attributes = imageLabel.Split(‘ ‘); //将图片属性分开

foreach (string temp_Attributes in Attributes) //得到图片地址属性
if (temp_Attributes.IndexOf(“src”) >= 0)
{
imgSrc = temp_Attributes.ToString();
break;
}
imgSrc = imgSrc.Substring(imgSrc.IndexOf(‘”‘) + 1, imgSrc.LastIndexOf(‘”‘) – imgSrc.IndexOf(‘”‘) – 1); //丛地址属性中提取地址

} while (imgSrc == “” && cat > 0);

return (imgSrc);
}
[/CODE]

C#验证表单的静态类,方便以后使用
[CODE=csharp]
using System;

namespace Youth.Admin
{
///

/// 表单验证类
///

public sealed class Validator
{
#region Check(object obj,string reg)验证基函数
public static bool Check(object obj,string reg)
{
return System.Text.RegularExpressions.Regex.IsMatch(obj.ToString(), reg, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
}
#endregion

#region IsNotEmpty验证是否为空
///

/// IsNotEmpty验证是否为空
///

public static bool IsNotEmpty(object obj)
{
return Check(obj,@”.?[^\s ]+”);
}
#endregion

#region 验证是不是正常字符 字母,数字,下划线的组合
///

/// 验证是不是正常字符 字母,数字,下划线的组合
///

/// ///
public static bool IsNormalChar(object obj)
{
return Check(obj, @”[\w\d_]+”);
}
#endregion

#region IsEnglish验证是否为英文字符及下划线
///

/// IsEnglish验证是否为英文字符及下划线
///

public static bool IsEnglish(object obj)
{
return Check(obj,@”^[a-zA-Z0-9_\-]+$”);
}
#endregion

#region IsChinese验证是否为中文字符
///

/// IsChinese验证是否为中文字符
///

public static bool IsChinese(object obj)
{
return Check(obj, @”^[\u0391-\uFFE5]+$”);
}
#endregion

#region IsDate是否为有效的日期格式
///

/// IsDate是否为有效的日期格式
///

public static bool IsDate(object obj)
{
try
{
DateTime time = Convert.ToDateTime(obj);
return true;
}
catch
{
return false;
}
}
#endregion

#region IsEmail是否为有效的邮箱格式
///

/// IsEmail是否为有效的邮箱格式
///

public static bool IsEmail(object obj)
{
return Check(obj, @”^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$”);
}
#endregion

#region IsUrl是否为有效的超链接格式
///

/// IsUrl是否为有效的超链接格式
///

public static bool IsUrl(object obj)
{
return Check(obj, @”^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www\.))+(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9\&%_\./-~-]*)?$”);
}
#endregion

#region IsPhone是否为有效的电话号码
///

/// 例如:XXX-XXXXXXX
///

public static bool IsPhone(object obj)
{
return Check(obj, @”^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$”);
}
#endregion

#region IsMobile是否为有效的手机号码
///

/// IsMobile是否为有效的手机号码
///

public static bool IsMobile(object obj)
{
return Check(obj, @”^((\(\d{2,3}\))|(\d{3}\-))?((13\d{9})|(159\d{8}))$”);
}
#endregion

#region IsIP是否为有效的IP地址
///

/// CheckIP是否为有效的IP地址
///

public static bool IsIP(object obj)
{
return Check(obj, @”^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$”);
}
#endregion

#region IsZipCode是否为有效的邮政编码
///

///IsZipCode是否为有效的邮政编码
///

public static bool IsZipCode(object obj)
{
return Check(obj, @”^[1-9]\d{5}$”);
}
#endregion

#region IsIdCard是否为有效的身份证号码
///

/// IsIdCard是否为有效的身份证号码
///

public static bool IsIdCard(object obj)
{
return Check(obj, @”(^\d{15}$)|(^\d{17}[0-9Xx]$)”);
}
#endregion

#region IsQQ是否为有效的QQ号码
///

/// IsQQ是否为有效的QQ号码
///

public static bool IsQQ(object obj)
{
return Check(obj, @”^[1-9]\d{4,10}$”);
}
#endregion

#region IsMSN是否为有效的MSN帐户
///

/// IsMSN是否为有效的MSN帐户
///

public static bool IsMSN(object obj)
{
return Check(obj, @”^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$”);
}
#endregion

#region IsNumber验证是不是数字
///

/// IsNumber验证是不是数字
///

public static bool IsNumber(object obj)
{
return Check(obj, @”^[-\+]?\d+(\.\d+)?$”);
}
#endregion

#region IsInteger验证是不是整数
///

/// IsInteger验证是不是整数
///

public static bool IsInteger(object obj)
{
return Check(obj, @”^-?\d+$”);
}
#endregion

#region IsUnsignedInteger验证是不是正整数
///

/// IsUnsignedInteger验证是不是正整数
///

public static bool IsUnsignedInteger(object obj)
{
return Check(obj, @”^[0-9]*[1-9][0-9]*$”);
}
#endregion

#region IsSignedInteger验证是不是负整数
///

/// IsSignedInteger验证是不是负整数
///

public static bool IsSignedInteger(object obj)
{
return Check(obj, @”^-[0-9]*[1-9][0-9]*$”);
}
#endregion
}
}

[/CODE]

写了一个弹出框的类,方便以后使用

[CODE=csharp]
using System;
using System.Web;
///

/// Message 的摘要说明
///

namespace Youth.Admin
{
public sealed class Message
{
#region 输出js
///

/// 输出js
///

/// 传入js代码 public static void Write(string str)
{
HttpContext.Current.Response.Write(““);
}
#endregion

#region 弹出框 Msg(string msg)
public static void Msg(string msg)
{
Write(“alert(‘”+msg+”‘);”);
}
#endregion

#region 弹出框并后退 MsgTo(string msg)
public static void MsgTo(string msg)
{
Write(“alert(‘” + msg + “‘);history.back();”);
}
#endregion

#region 弹出框并到第几页 MsgTo(string msg,int page)
public static void MsgTo(string msg,int page)
{
Write(“alert(‘” + msg + “‘);history.back(‘”+page+”‘);”);
}
#endregion

#region 到达第几页 MsgTo(int page)
public static void MsgTo(int page)
{
Write(“history.back(‘” + page + “‘);”);
}
#endregion

#region 弹出框并转跳地址 MsgTo(string msg,string url)
public static void MsgTo(string msg,string url)
{
Write(“alert(‘” + msg + “‘);location.href='”+url+”‘;”);
}
#endregion

}
}

[/CODE]

 RegisterStartupScript是page里面的方法,必须实例化一个page,代码就很简单了

System.Web.UI.Page page = new System.Web.UI.Page();

System.Web.UI.ClientScriptManager cs = page.ClientScript;

cs.RegisterStartupScript(typeof(string), "1", "alert(‘IT元素’);", true);

 

 

昨天全盘格了,装了vs2005之后,安装iis,结果运行出现

使用XSL 样式表无法查看XML 输入。请更正错误然后单击刷新按钮 …(ie)

chrome:

This page contains the following errors:

error on line 1 at column 2: StartTag: invalid element name
error on line 1 at column 2: Encoding error
Below is a rendering of the page up to the first error.

不同浏览器不一样,原因是没有将aspnet程序安装进入iis里面,找到sdk命令提示(可以在开始–程序……那里或者安装目录里面查找),输入aspnet_regiis.exe /i,就ok了。

1.C#连接连接Access
程序代码:
——————————————————————————-
using System.Data;
using System.Data.OleDb;

……

string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";
strConnection+=@"Data Source=C:\BegASPNET\Northwind.mdb";

OleDbConnection objConnection=new OleDbConnection(strConnection);

……

objConnection.Open();
objConnection.Close();

……

——————————————————————————–

解释:

连接Access数据库需要导入额外的命名空间,所以有了最前面的两条using命令,这是必不可少的!

strConnection这个变量里存放的是连接数据库所需要的连接字符串,他指定了要使用的数据提供者和要使用的数据源.

"Provider=Microsoft.Jet.OleDb.4.0;"是指数据提供者,这里使用的是Microsoft Jet引擎,也就是Access中的数据引擎,asp.net就是靠这个和Access的数据库连接的.

"Data Source=C:\BegASPNET\Northwind.mdb"是指明数据源的位置,他的标准形式是"Data Source=MyDrive:MyPath\MyFile.MDB".

PS:
1."+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符.
2.如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接:
strConnection+="Data Source=";
strConnection+=MapPath("Northwind.mdb");
这样就可以省得你写一大堆东西了!
3.要注意连接字符串中的参数之间要用分号来分隔.

"OleDbConnection objConnection=new OleDbConnection(strConnection);"这一句是利用定义好的连接字符串来建立了一个链接对象,以后对数据库的操作我们都要和这个对象打交道.

"objConnection.Open();"这用来打开连接.至此,与Access数据库的连接完成.
——————————————————————————–

2.C#连接SQL Server
程序代码:
——————————————————————————–

using System.Data;
using System.Data.SqlClient;

string strConnection="user id=sa;password=;";
strConnection+="initial catalog=Northwind;Server=YourSQLServer;";
strConnection+="Connect Timeout=30";

SqlConnection objConnection=new SqlConnection(strConnection);

objConnection.Open();
objConnection.Close();

——————————————————————————–

解释:

连接SQL Server数据库的机制与连接Access的机制没有什么太大的区别,只是改变了Connection对象和连接字符串中的不同参数.

首先,连接SQL Server使用的命名空间不是"System.Data.OleDb",而是"System.Data.SqlClient".

其次就是他的连接字符串了,我们一个一个参数来介绍(注意:参数间用分号分隔):
"user id=sa":连接数据库的验证用户名为sa.他还有一个别名"uid",所以这句我们还可以写成"uid=sa".
"password=":连接数据库的验证密码为空.他的别名为"pwd",所以我们可以写为"pwd=".
这里注意,你的SQL Server必须已经设置了需要用户名和密码来登录,否则不能用这样的方式来登录.如果你的SQL Server设置为Windows登录,那么在这里就不需要使用"user id"和"password"这样的方式来登录,而需要使用"Trusted_Connection=SSPI"来进行登录.
"initial catalog=Northwind":使用的数据源为"Northwind"这个数据库.他的别名为"Database",本句可以写成"Database=Northwind".
"Server=YourSQLServer":使用名为"YourSQLServer"的服务器.他的别名为"Data Source","Address","Addr".如果使用的是本地数据库且定义了实例名,则可以写为"Server=(local)\实例名";如果是远程服务器,则将"(local)"替换为远程服务器的名称或IP地址.
"Connect Timeout=30":连接超时时间为30秒.

在这里,建立连接对象用的构造函数为:SqlConnection.
——————————————————————————–

3.C#连接Oracle
程序代码:
——————————————————————————–

using System.Data.OracleClient;
using System.Data;

//在窗体上添加一个按钮,叫Button1,双击Button1,输入以下代码
private void Button1_Click(object sender, System.EventArgs e)
{
string ConnectionString="Data Source=sky;user=system;password=manager;";//写连接串
OracleConnection conn=new OracleConnection(ConnectionString);//创建一个新连接
try
{
conn.Open();
OracleCommand cmd=conn.CreateCommand();

cmd.CommandText="select * from MyTable";//在这儿写sql语句
OracleDataReader odr=cmd.ExecuteReader();//创建一个OracleDateReader对象
while(odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{
Response.Write(odr.GetOracleString(1).ToString());//输出字段1,这个数是字段索引,具体怎么使用字段名还有待研究
}
odr.Close();
}
catch(Exception ee)
{
Response.Write(ee.Message); //如果有错误,输出错误信息
}
finally
{
conn.Close(); //关闭连接
}
}

——————————————————————————–

4.C#连接MySQL
程序代码:
——————————————————————————–

using MySQLDriverCS;

// 建立数据库连接
MySQLConnection DBConn;
DBConn = new MySQLConnection(new MySQLConnectionString("localhost","mysql","root","",3306).AsString);
DBConn.Open();

// 执行查询语句
MySQLCommand DBComm;
DBComm = new MySQLCommand("select Host,User from user",DBConn);

// 读取数据
MySQLDataReader DBReader = DBComm.ExecuteReaderEx();

// 显示数据
try
{
while (DBReader.Read())
{
Console.WriteLine("Host = {0} and User = {1}", DBReader.GetString(0),DBReader.GetString(1));
}
}
finally
{
DBReader.Close();
DBConn.Close();
}

//关闭数据库连接
DBConn.Close();

——————————————————————————–

5.C#连接IBM DB2
程序代码:
——————————————————————————–

OleDbConnection1.Open();
//打开数据库连接
OleDbDataAdapter1.Fill(dataSet1,"Address");
//将得来的数据填入dataSet
DataGrid1.DataBind();
//绑定数据
OleDbConnection1.Close();
//关闭连接

//增加数据库数据
在Web Form上新增对应字段数量个数的TextBox,及一个button,为该按键增加Click响应事件代码如下:

this.OleDbInsertCommand1.CommandText = "INSERTsintosADDRESS(NAME,
EMAIL, AGE, ADDRESS) valueS
(”"+TextBox1.Text+"”,”"+TextBox2.Text+"”,”"+TextBox3.Text+"”,”"+TextBox4.Text+"”)";
OleDbInsertCommand1.Connection.Open();
//打开连接
OleDbInsertCommand1.ExecuteNonQuery();
//执行该SQL语句
OleDbInsertCommand1.Connection.Close();
//关闭连接

——————————————————————————–

6.C#连接SyBase
程序代码: (OleDb)
——————————————————————————–

Provider=Sybase.ASEOLEDBProvider.2;Initial Catalog=数据库名;User ID=用户名;Data Source=数据源;
Extended Properties="";Server Name=ip地址;Network Protocol=Winsock;Server Port Address=5000;

用C#连接SQL 2000数据库,怎样用Windows身份验证模式连接数据库
adoconnection1.string:=’Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=ls;Data Source=BLUEBOY;’//这样就可以了
其中:’Provider=SQLOLEDB.1;为驱动程序
Integrated Security=SSPI;为集中登录模式
Initial Catalog=ls;/要访问的数据名
Data Source

Asp.Net防止刷新重复提交数据小记2008-09-22 16:16最近在用Asp.Net编写点东西时遇到个问题:即用户在提交表单后按刷新就会重复提交数据,即所谓的“刷新重复提交”的问题。在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是“刷新”、“后退”请求,还是正常请求,其他的页面则继承了自定义的这 个Page类。感觉他这个方法比较独特,有例子可以下载,有兴趣的可以研究研究。

网上最多的解决此类问题的方法就是不保存缓存,即提交后表单上的数据不会被浏览器的缓存保存,如果此时再遇到刷新或者后退请求时, 就会显示“网页已过期”,数据也就不会重复提交了,这就起到了阻止刷新重复提交的效果。

下面以简单的提交一篇帖子为例,介绍禁用缓存防止刷新重复提交的方法,表单数据包括“标题”和“正文”两个部分。

以下是该方法的代码(post.aspx):

//页面加载

protected void Page_Load(object sender, EventArgs e)

{

   //可以在页面加载时设置页面的缓存为“SetNoStore()”,即无缓存

   Response.Cache.SetNoStore();

   //Session中存储的变量“IsSubmit”是标记是否提交成功的

   if ((bool)Session["IsSubmit"])

   {

     //如果表单数据提交成功,就设“Session["IsSubmit"]”为false

     Session["IsSubmit"] = false;

     //显示提交成功信息

     ShowMsg.Text = " * 提交成功!";

   }

   else

     //否则的话(没有提交,或者是页面刷新),不显示任何信息

     ShowMsg.Text = "";

}

//提交按钮(btnOK)单击事件

protected void btnOK_Click(object sender, EventArgs e)

{

   if (txtTitle.Text.ToString().Trim() == "")

     //ShowMsg是用来显示提示信息的

     ShowMsg.Text = " * 标题不能为空!";

   else if (txtText.Text.ToString().Trim() == "")

     ShowMsg.Text = " * 内容不能为空!";

   else

   {

     //这里是将数据提交到数据库中,省略

     /*

     string sql = "insert into tab…values(…)";

     MyConn.ExecQuery(sql);

     */

     //提交成功后,设“Session["IsSubmit"]”为true

     Session["IsSubmit"] = true;

     //强制转换页面(不可少,否则刷新仍会重复提交,仍转到本页),

     通过页面的转换将缓存中的提交的数据都释放了,即提交的标单数据不会被保存到缓存里,

     如果后退的话,将会出现该页无法显示

     Response.Redirect("post.aspx");

   }

}

上面这个方法非常简单也很实用,推荐大家使用。

下面是我自己研究出来的另一种方法,该方法不同于“不保存缓存的方法”,它是让浏览器保存所有页面缓存的。该方法通过随机码的方式 来判断是正常提交还是“刷新”或“后退”的。

首先(提交页面是post.aspx)在 Session 中 增加变量 Rnd 用来存放随机码,同时在提交表单数据时不做处理,而是让页面转到 post.aspx?r=x,这里“x”等于Session["Rnd"],这个时候在页面加载时,通过判断r的值和Session["Rnd"]的值是否相同,如果相同就处理提 交的数据,否则即可认为是“刷新”或者是“后退”操作了,最后再次付给Session["Rnd"]一个随机码。

以下是该方法代码(post.aspx):

//获取随机码

public class MyRnd

{

   public static string Rnd()

   {

     //随机码是由 0-9 a-z A-Z 之间的数字或字母组成的

     //下面是生成的20位随机码

     //0..9 A..Z a..z

     //48-57 65-90 97-122

     string rst = "";

     Random rr = new Random();

     for (int i = 0; i < 20; i++)

     {

       int ir = 0;

       do

       {

         ir = rr.Next(123);

         if((ir >= 48) && (ir <= 57)) break;

         else if((ir >= 65) && (ir <= 90)) break;

         else if ((ir >= 97) && (ir <= 122)) break;

       }

       while (true);

       rst += ((char)ir).ToString();

       }

     return rst;

   }

}

//页面加载

protected void Page_Load(object sender, EventArgs e)

{

   //获取URL中请求的“r”值,如果“r”不存在则 r=""

   string r = "";

   if(Request.QueryString["r"] != null)

     r = Request.QueryString["r"].ToString().Trim();

   string t;

   //获取 “Session” 中的 “Rnd” 值,用于和“r”比较

   t = Session["Rnd"].ToString().Trim();

   //如果“r=t”则为提交操作,即可对表单的数据进行处理

   if(r == t)

   {

     if (txtTitle.Text.ToString().Trim() == "")

       ShowMsg.Text = " * 标题不能为空!";

     else if (txtText.Text.ToString().Trim() == "")

       ShowMsg.Text = " * 内容不能为空!";

     else      {

       //这里是将数据提交到数据库中,省略

       /*

       string sql = "insert into tab…values(…)";

       MyConn.ExecQuery(sql);

       */

       //提交成功后清空表单数据

       txtTitle.Text = "";

       txtText.Text = "";

       //显示提交成功信息

       ShowMsg.Text = " * 提交成功!";

     }

   }

   //否则可以认为是“刷新”或者“后退”操作

   else

   {

       txtTitle.Text = "";

       txtText.Text = "";

   }

   //最后要重新获得“Session["Rnd"]”的值,并将“btnOK.PostBackUrl”设为“Session["Rnd"]”的值

   Session["Rnd"] = MyRnd.Rnd();

   btnOK.PostBackUrl ="post.aspx?r=" + Session["Rnd"].ToString().Trim();

}

//这里提交按钮(btnOK)单击事件就不需要写任何代码了

通过这种方法,每次加载页面时“Session["Rnd"]”都将得到一个新的值,而在刷新或后退时就不会得到相同的“r”和“t”值,数据也就 不会被重复提交,只有通过“btnOK”来提交的操作才会得到“r==t”,数据才会被提交处理的,通过判断随机码的方式来阻止刷新重复提交就 可以实现了。