protected void Page_Load(object sender, EventArgs e)
{
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@"\bin\Debug\")|| dataDir.EndsWith(@"\bin\Release\"))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
}
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
try
{
conn.Open();
Response.Write("数据库连接成功!");
}
catch(Exception ee)
{
Response.Write("连接失败,原因为:"+ee.Message);
}
}
SqlDataReader reader=cmd.ExecuteReader();
reader.GetString(i);方法通过第i列的方法获取表中第i列的数据。
reader.GetOrdinal("user");通过列名来获取资源数据
readre.read();//向前读取一行一行进行的。不能回退
SQL并不区分大小写,但是还是推荐使用大写来写SQL语句,这样能够在应用程序中清晰的辨认
ExecuteScaler : 只读,读取返回结果集合里面第一行第一列
ExecuteNonQuery:只写,适合于只需要修改的情况
ExecuteReader:只读,可以读取多行
DataAdapter / DataSet:读取之后,可以进行离线操作,然后再把改动update回数据苦,功能相当于一个数据库:有relation,constraint,view,sort,search支持,而且可以直接和.net控件绑定,相当于一个business层的功能,还可以通过webservice传输到其它远程机器,非常方便。
Open()
使用 ConnectionString 所指定的属性设置打开数据库连接。
命名空间:System.Data.SqlClient
程序集:System.Data(在 system.data.dll 中)
Close();//但是还是可以打开
关闭与数据库的连接。这是关闭任何打开连接的首选方法。
命名空间:System.Data.SqlClient
程序集:System.Data(在 system.data.dll 中)
dispose()后就不能再次打开;
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from users";
using(SqlDataReader reader=cmd.ExecuteReader())
{
using在出了作用域后会调用dispose(),SqlConnection,filestream等的dispose内部会判断有没有close,如果没有close就close后再dispose();
SqlCommand.ExecuteScalar 方法
执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。
string cmdstr = "select count(*) from users where UserName='"+username+"' and PassWord='"+password+"'";
SqlCommand cmd = new SqlCommand(cmdstr,conn);
int i = Convert.ToInt32(cmd.ExecuteScalar());//如?果?查é到?有瓺的?话°,?i是?一?个?非?零?值μ,?否?则ò为a零?值μ
conn.Open();
//下面这种方式有漏洞
// string cmdstr = "select count(*) from users where UserName='"+username+"' and PassWord='"+password+"'";
//上面这种方法会有注入漏洞攻击风险
//下面这种方法可以避免:
string cmdstr = "select count(*) from users where UserName=@u and PassWord=@p";
SqlCommand cmd = new SqlCommand(cmdstr,conn);
cmd.Parameters.Add(new SqlParameter("u", username));
cmd.Parameters.Add(new SqlParameter("p",password));
int i = Convert.ToInt32(cmd.ExecuteScalar());//如果查到有的话,i是一个非零值,否则为零值
if (i > 0)
{
Console.WriteLine("恭喜您,登录成功!!"+i);
}
else
{
Console.WriteLine("用户名或者密码错误,登录失败!!!!!!!"+i);
}
利用configuration文件来连接数据库:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<appSettings>
<add key="constring" value="server=.;database=Northwind;uid=sa;pwd=;"/>
</appSettings>
</configuration>
然后在程序中引用
SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings["constring"]);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from Customers";
cmd.Connection = con;
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetString(0)+"\t"+reader.GetString(1)+"<br/>");
}
con.Close();
下面是连接成功后的输出结果: