`

.net 程序开发

    博客分类:
  • C#
 
阅读更多
1、ADO.Net连接SQLServer
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  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics