- 浏览: 203095 次
- 性别:
- 来自: 湖南
文章分类
最新评论
1、ADO.Net连接SQLServer
2、别忘了Using
开发工具会自动引入命名空间
3、可能遇到的错误
1、由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例
2、版本过低,只支持2005及以版本数据库
解决办法:安装VisualStudio 2008 sp1
3、启动超时,多试几次
4、.net 添加查询功能
5、登录练习
6、.net 详解
sql关键字可用 [关键字] 例如[user]
获取插入主键
SqlCommand的ExecuteScalar方法执行查询,并返回结果集中第一行第一列,因为不能确定值的类型,所以返回object类型。• ExecuteNonQuery()的用法
下面我们将详细讲解如何在Page_Load()中对数据库的增加、删除、修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法:
1、 增加新的记录
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "insert into admin values(‘aaddq‘,‘as‘,‘ss‘)";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于增加了一条记录,所以返回1
//或者MyCommand1.ExecuteReader();先增加一条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先增加一条记录,返回未实列化的对象
MyConnection.Close();
}
2、 删除现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "delete * from admin";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于删除了n条记录,所以返回n
//或者MyCommand1.ExecuteReader();先删除n条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先删除n条记录,返回未实列化的对象
MyConnection.Close();
}
3、 修改现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "update admin set admin_code=’212’,Admin_pwd=’43’ where admin_code=’23’";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于修改了1条记录,所以返回n
//或者MyCommand1.ExecuteReader();先修改了1条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先修改了1条记录,返回未实列化的对象
MyConnection.Close();
}
三、关于MyCommand的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的区别:
1、ExecuteNonQuery():执行SQL,返回一个整型变量,如果SQL是对数据库的记录进行操作,那么返回操作影响的记录条数,如果是 SQL="CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"那么在表创建成功后该方法返回 –1。
例如:
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"; MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’首先建立一个LookupCodes表,然后返回-1
//或者MyCommand1.ExecuteReader();首先建立一个LookupCodes表,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();首先建立一个LookupCodes表,返回未实列化的对象
MyConnection.Close();
}
2、 ExecuteScalar():执行SQL,(如果SQL是查询Select)返回查询结果的第一行第一列,如果(如果SQL不是查询Select)那 么返回未实列化的对象,因为对象未实列化,所以返回结果不能ToString(),不能Equals(null),也就是说返回结果没有任何作用
3、 executeReader方法执行SQL,(如果SQL是查询Select)返回查询结果的集合,类型是 System.Data.OleDb.OleDbDataReader,你可以通过此结果,获取查询的数据。如果(如果SQL不是查询Select)那么 返回一个没有任何数据的System.Data.OleDb.OleDbDataReader类型的集合(EOF)
四、总结:
ASP.Net中对于数据库的操作方法很多,要实现统一个目标不同的人可能会采取不同的方法,就好像在ASP中有的人喜欢用RS.ADDNEW,有的人喜 欢用”Insert Into”,主要是看个人的习惯,当然在性能上不同的方法可能会存在较大的差别,这个只能靠我们在平常的学习中一点一滴的积累经验的。另外顺便说一下 ASP.Net页提供类似如下方式的操作方法:
OleDbCommand2.Parameters("au_id").Value = TextBox1.Text
OleDbCommand2.Parameters("au_lname").Value = TextBox2.Text
OleDbCommand2.Parameters("au_fname").Value = TextBox3.Text
OleDbCommand2.Parameters("phone").Value = TextBox4.Text
OleDbCommand2.Parameters("address").Value = TextBox5.Text
OleDbCommand2.Parameters("city").Value = TextBox6.Text
OleDbCommand2.Parameters("st").Value = TextBox7.Text
OleDbCommand2.Parameters("zip").Value = TextBox8.Text
OleDbCommand2.Parameters("contract").Value = CheckBox1.Checked
cmdresults = OleDbcommand2.ExecuteNonQuery()
SQLServer数据库
主键生成(int/bigint uniqueidentifier)
1、int自增长优点:占用空间小,无需开发人员干预、易读;缺点:效率低;数据导入导出时间长
2、Guid的优点:效率高、数据导入方便;缺点:缺点占用空间大、不易读。
数据库添加时使用函数 newid()
给字段默认值,如果是Guid类型主键的默认值设定为newid()就会自动生成,很少这么干。
不带任何关系表
SELECT 1 + 1 AS 列1, GETDATE() AS 日期, NEWID() AS 编号
SELECT NULL + 12 AS Expr1, 'abc' + '123' AS Expr2, '' + '123' AS Expr3, NULL + '123' AS Expr4
空匹配:某个字段值null是 用is null 或 is not null,不能用==,<>,!=null
多值匹配:in() between value1 to value2
数据分组:SELECT age, COUNT(*) AS Expr1 FROM Person GROUP BY age HAVING (age > 20)
限制结果集行数
SELECT TOP (2) id, name, age FROM Person
SQLServer 2005 新增 Row_Number函数简化实现
抑制重复数据
SELECT DISTINCT id, name, age FROM Person
联合结果集
基本原则,每个结果集必须有相同的列数,每个结果集的列必须类型相容。
SELECT 0 AS Expr1, name FROM Person UNION SELECT id, name FROM Users
UNION 合并结果集,并且将其中完全一样重复的数据合并为一条
UNION ALL UNION因为进行重复扫描,效率低,如果不是确定合并重复行,哪就用UNION ALL
实例:
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; namespace day1_1 { class Class1 { static void Main(string[] args) { 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"); conn.Open(); Console.WriteLine("打开数据库成功!"); SqlCommand command = new SqlCommand("select * from users",conn); SqlDataReader dataRead = command.ExecuteReader(); while (dataRead.Read()) { Console.WriteLine("用户ID={0}|姓名={1}",dataRead.GetInt32(0),dataRead.GetString(1)); } dataRead.Close(); conn.Close(); Console.ReadKey(); } } }
2、别忘了Using
开发工具会自动引入命名空间
3、可能遇到的错误
1、由于启动用户实例的进程时出错,导致无法生成SQL Server的用户实例
2、版本过低,只支持2005及以版本数据库
解决办法:安装VisualStudio 2008 sp1
3、启动超时,多试几次
4、.net 添加查询功能
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True")) { conn.Open(); Console.WriteLine("打开数据库成功!"); using (SqlCommand comm = conn.CreateCommand()) { comm.CommandText = "insert into users(name) values('cccc')"; comm.ExecuteNonQuery(); Console.WriteLine("插入数据库成功!"); } SqlCommand command = new SqlCommand("select * from users", conn); SqlDataReader dataRead = command.ExecuteReader(); while (dataRead.Read()) { Console.WriteLine("用户ID={0}|姓名={1}",dataRead.GetInt32(0),dataRead.GetString(1)); } dataRead.Close(); conn.Close(); }
5、登录练习
using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; namespace day1_1 { class Class1 { static void Main(string[] args) { 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); } Console.Write("用户名:"); string username = Console.ReadLine(); Console.Write("密 码:"); string password = Console.ReadLine(); Console.WriteLine(username + " " + password); using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True")) { conn.Open(); Console.WriteLine("打开数据库成功!"); using (SqlCommand comm = conn.CreateCommand()) { comm.CommandText = "select * from users where name = '" + username + "'"; using (SqlDataReader dataRead = comm.ExecuteReader()) { if (dataRead.Read()) { //用户存在 string pwd = dataRead.GetString(dataRead.GetOrdinal("password")).Trim(); if (password == pwd) { Console.WriteLine("登录成功!"); } else { Console.WriteLine(password + "密码错误,登录失败!" + pwd); } } else { Console.WriteLine("用户名错误!"); } dataRead.Close(); } } conn.Close(); } Console.ReadKey(); } } }
6、.net 详解
sql关键字可用 [关键字] 例如[user]
获取插入主键
comm.CommandText = "insert into users(name,password) output inserted.Id values('"+username+"','"+password+"')"; int id = Convert.ToInt32(comm.ExecuteScalar()); Console.WriteLine("插入的ID是:{0}",id);
SqlCommand的ExecuteScalar方法执行查询,并返回结果集中第一行第一列,因为不能确定值的类型,所以返回object类型。• ExecuteNonQuery()的用法
下面我们将详细讲解如何在Page_Load()中对数据库的增加、删除、修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法:
1、 增加新的记录
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "insert into admin values(‘aaddq‘,‘as‘,‘ss‘)";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于增加了一条记录,所以返回1
//或者MyCommand1.ExecuteReader();先增加一条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先增加一条记录,返回未实列化的对象
MyConnection.Close();
}
2、 删除现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "delete * from admin";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于删除了n条记录,所以返回n
//或者MyCommand1.ExecuteReader();先删除n条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先删除n条记录,返回未实列化的对象
MyConnection.Close();
}
3、 修改现有数据
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "update admin set admin_code=’212’,Admin_pwd=’43’ where admin_code=’23’";
MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’由于修改了1条记录,所以返回n
//或者MyCommand1.ExecuteReader();先修改了1条记录,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();先修改了1条记录,返回未实列化的对象
MyConnection.Close();
}
三、关于MyCommand的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的区别:
1、ExecuteNonQuery():执行SQL,返回一个整型变量,如果SQL是对数据库的记录进行操作,那么返回操作影响的记录条数,如果是 SQL="CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"那么在表创建成功后该方法返回 –1。
例如:
private void Page_Load(object sender, System.EventArgs e)
{
MyConnection.Open();’打开数据库
MyCommand1.CommandText = "CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)"; MyCommand1.Connection = MyConnection;
MyCommand1.ExecuteNonQuery();’首先建立一个LookupCodes表,然后返回-1
//或者MyCommand1.ExecuteReader();首先建立一个LookupCodes表,然后返回一个System.Data.OleDb.OleDbDataReader类型的对象,该对象为:EOF
//或者MyCommand1. ExecuteScalar();首先建立一个LookupCodes表,返回未实列化的对象
MyConnection.Close();
}
2、 ExecuteScalar():执行SQL,(如果SQL是查询Select)返回查询结果的第一行第一列,如果(如果SQL不是查询Select)那 么返回未实列化的对象,因为对象未实列化,所以返回结果不能ToString(),不能Equals(null),也就是说返回结果没有任何作用
3、 executeReader方法执行SQL,(如果SQL是查询Select)返回查询结果的集合,类型是 System.Data.OleDb.OleDbDataReader,你可以通过此结果,获取查询的数据。如果(如果SQL不是查询Select)那么 返回一个没有任何数据的System.Data.OleDb.OleDbDataReader类型的集合(EOF)
四、总结:
ASP.Net中对于数据库的操作方法很多,要实现统一个目标不同的人可能会采取不同的方法,就好像在ASP中有的人喜欢用RS.ADDNEW,有的人喜 欢用”Insert Into”,主要是看个人的习惯,当然在性能上不同的方法可能会存在较大的差别,这个只能靠我们在平常的学习中一点一滴的积累经验的。另外顺便说一下 ASP.Net页提供类似如下方式的操作方法:
OleDbCommand2.Parameters("au_id").Value = TextBox1.Text
OleDbCommand2.Parameters("au_lname").Value = TextBox2.Text
OleDbCommand2.Parameters("au_fname").Value = TextBox3.Text
OleDbCommand2.Parameters("phone").Value = TextBox4.Text
OleDbCommand2.Parameters("address").Value = TextBox5.Text
OleDbCommand2.Parameters("city").Value = TextBox6.Text
OleDbCommand2.Parameters("st").Value = TextBox7.Text
OleDbCommand2.Parameters("zip").Value = TextBox8.Text
OleDbCommand2.Parameters("contract").Value = CheckBox1.Checked
cmdresults = OleDbcommand2.ExecuteNonQuery()
SQLServer数据库
主键生成(int/bigint uniqueidentifier)
1、int自增长优点:占用空间小,无需开发人员干预、易读;缺点:效率低;数据导入导出时间长
2、Guid的优点:效率高、数据导入方便;缺点:缺点占用空间大、不易读。
数据库添加时使用函数 newid()
给字段默认值,如果是Guid类型主键的默认值设定为newid()就会自动生成,很少这么干。
不带任何关系表
SELECT 1 + 1 AS 列1, GETDATE() AS 日期, NEWID() AS 编号
SELECT NULL + 12 AS Expr1, 'abc' + '123' AS Expr2, '' + '123' AS Expr3, NULL + '123' AS Expr4
空匹配:某个字段值null是 用is null 或 is not null,不能用==,<>,!=null
多值匹配:in() between value1 to value2
数据分组:SELECT age, COUNT(*) AS Expr1 FROM Person GROUP BY age HAVING (age > 20)
限制结果集行数
SELECT TOP (2) id, name, age FROM Person
SQLServer 2005 新增 Row_Number函数简化实现
抑制重复数据
SELECT DISTINCT id, name, age FROM Person
联合结果集
基本原则,每个结果集必须有相同的列数,每个结果集的列必须类型相容。
SELECT 0 AS Expr1, name FROM Person UNION SELECT id, name FROM Users
UNION 合并结果集,并且将其中完全一样重复的数据合并为一条
UNION ALL UNION因为进行重复扫描,效率低,如果不是确定合并重复行,哪就用UNION ALL
实例:
SELECT '正式员工最高年龄', max(age) FROM Person1 union all SELECT '正式员工最低年龄', min(age) FROM Person1 union all SELECT '临时员工最高年龄', max(age) FROM Person2 union all SELECT '临时员工最低年龄', min(age) FROM Person2
SELECT name, age FROM Person UNION SELECT '年龄平均值' AS Expr1, AVG(age) AS Expr2 FROM Person AS Person_1
相关推荐
《ASP.NET程序开发范例宝典3》光盘资料提供了丰富的学习资源,旨在帮助开发者深入理解和熟练掌握ASP.NET这一强大的Web应用程序开发框架。ASP.NET是微软.NET Framework的一部分,它允许开发人员构建功能丰富的、高...
在JScript.NET程序开发中,有以下几个核心知识点: 1. **类型系统**:与传统的JavaScript不同,JScript.NET支持静态类型声明,这意味着变量在声明时可以指定类型,提高了代码的可读性和编译时的错误检查能力。 2. ...
《ASP.NET程序开发范例宝典(C#)(第3版)》是明日科技公司由王小科和赵会东编著的一本经典编程教材,由人民邮电出版社于2012年5月出版。这本书以C#语言为基础,深入浅出地介绍了ASP.NET的开发技术,通过丰富的实例...
**JScript.NET程序开发概述** JScript.NET是微软在.NET框架下推出的一种脚本语言,它是JavaScript的一个变种,旨在为.NET平台提供更强大的服务。本教程将带你深入理解JScript.NET的基础知识,掌握如何利用它进行...
**JScript.NET程序开发** JScript.NET是一种基于ECMAScript标准的编程语言,由微软公司为.NET Framework开发,旨在提供一种轻量级、跨平台的脚本语言用于构建.NET应用程序。JScript.NET不仅继承了JavaScript的基本...
《ASP.NET程序开发范例宝典08光盘资料》是一个涵盖了ASP.NET技术深度实践的资源集合,旨在为开发者提供丰富的实例和参考资料。这个压缩包很可能是当年ASP.NET技术发展的一个重要里程碑,其中包含了第8个阶段的学习...
ASP.NET程序开发范例宝典是一本全面介绍ASP.NET技术的资源集合,包含了大量实际编程示例,旨在帮助开发者深入理解和应用ASP.NET框架。这套宝典由多个章节组成,每个章节对应一个或多个实例,覆盖了ASP.NET的核心概念...
asp.net程序开发范例宝典pdf电子书(5)
在VB.NET程序中,我们需要导入相应的命名空间,如`Microsoft.DirectX`和`Microsoft.DirectX.Direct3D`等,以便使用DirectX的功能。 2. **设备初始化**:在VB.NET中使用DirectX之前,需要创建并初始化一个DirectX...
ASP.NET程序开发范例宝典(C_#)(第2版)].张跃延.影印版.part2
ASP.NET程序开发范例宝典(光盘)----第5部分,大家一定把这5部分都下载完了再解压。如果不能解压,请告诉我,我再重新上传
ASP.NET程序开发范例宝典(C#)(第2版) 共两部分
ASP.NET程序开发范例宝典(C#)(第2版).part1 http://download.csdn.net/source/3094999 ASP.NET程序开发范例宝典(C#)(第2版).part2 http://download.csdn.net/source/3095005 ASP.NET程序开发范例宝典(C#)(第2版)....
ASP.NET程序开发范例宝典(C#)(第2版).part1 http://download.csdn.net/source/3094999 ASP.NET程序开发范例宝典(C#)(第2版).part2 http://download.csdn.net/source/3095005 ASP.NET程序开发范例宝典(C#)(第2版)....
ASP.NET程序开发范例宝典(C#)(第2版).part1 http://download.csdn.net/source/3094999 ASP.NET程序开发范例宝典(C#)(第2版).part2 http://download.csdn.net/source/3095005 ASP.NET程序开发范例宝典(C#)(第2版)....
ASP.NET程序开发范例宝典(C#)(第2版).part1 http://download.csdn.net/source/3094999 ASP.NET程序开发范例宝典(C#)(第2版).part2 http://download.csdn.net/source/3095005 ASP.NET程序开发范例宝典(C#)(第2版)....
ASP.NET程序开发范例宝典(C#)(第2版).part1 http://download.csdn.net/source/3094999 ASP.NET程序开发范例宝典(C#)(第2版).part2 http://download.csdn.net/source/3095005 ASP.NET程序开发范例宝典(C#)(第2版)....
现在权限只能上传10M的~~~这本书还不错,很多人都下载了书本内容,这是光盘的内容,共9份~~~ 第九份重新上传了,请大家安心下载~
ASP.NET程序开发资源库.rar"的压缩包文件显然为开发者提供了丰富的资源,帮助他们进行ASP.NET的开发工作。下面将详细探讨ASP.NET的核心概念以及与压缩包内的文件相关的知识点。 首先,ASP.NET提供了多种开发模型,...