基础知识总结:
1、对于数据库中经常用于查询的字段,可以添加创建索引以提高查询的效率,添加索引对其它操作不会有任何的影响。
2、在创建数据库的时候需要注意字段类型的选择,如果存入的数据的长度不确定,可以选择nvarchar类型,如果插入的数据含有中文,需要在值之前添加一个“N”。
3、主键的设置,一般都是设置一个与业务无关的整形数据做为主键,主键不能够为空,如果字段设置为表示字段为真,再插入数据时就可以不用写。
数据库的应用:
1、在使用使用数据库的资源时,一般都是用using进行数据库的资源管理,Using会在关闭数据库之前检查是否进行了dispose()函数的操作。dispose是撤销数据库,close是关闭数据库,如果在关闭之前进行了撤销操作,数据库将无法关闭,进而导致程序的崩溃。
2、数据库的连接:database数据库连接方式。
a) 首先创建一个SqlConnection对象,然后通过对象调用ConnectionString连接字符串。再调用Open方法。
b) 在执行SQL操作语句之前应该先通过SqlConnection对象调用CreateCommand方法创建一个SqlCommand对象,这个对象调用CommandText属性,执行操作SQL语句。
c) SQL语句执行的结果可以通过提供的方法返回:常用的方法有
i. ExecuteNonQuery方法返回的是执行影响的行数。
ii. ExecuteScalar()方法会返回结果的第一行第一列
iii. ExecuteReader()方法可以通过SqlDataReader类的对象进行读取返回的所有结果,读取结果使用Read方法,每调用一次,内部的指针就会向下移动一行。获取结果值的方法可以调用GetString或者是GetInt32方法,还可以通过GetOrdinal方法根据列的名称获取值,GetOrdinal方法是用来获取指定列的列序号,
3、获取自增自段的值,可以在插入语句中添加OUTPUT inserted.Id获取自增自段的值。
4、动态向数据库中添加数据有两种方法:
a) 使用字符连接方法,例如:cmd.CommandText = "select * from T_UserPassword where UserName='" + user + "'";
b) 使用占位符参数:例如:cmd.CommandText = "select * from T_UserPassword where UserName=@username";这还需要使用cmd.Parameters.Add(new SqlParameter("username", user));向SQL语句添加数据转换的参数。第一个参数是占位符名字,第二个参数是传入的实际值的名字。
注意:这两种方法都可以添加数据,但是第一种方法存在一个缺点漏洞,对于密码一类的信息在进行匹配的时候会出现错误,这是不应该存在的,所以一般都是用第二种方法。
实例:代码可以使用】
using System;
using System.Collections.Generic;using System.Data.SqlClient;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// OpenDatabase();
Console.WriteLine("请输入用户名:");
string userName = Console.ReadLine();
Console.WriteLine("请输入密码:");
string passWord = Console.ReadLine();
OpenDatabase(userName,passWord);
Console.ReadKey();
}
//数据库的一些操作
public static void OpenDatabase(string user,string password)
{
//连接数据库
//新建一个数据库对象
//SqlConnection类表示一个到SQL Server数据库的打开的连接
//using 可以进行资源的释放
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = "server=192.168.2.28; database=DB_Test; uid=sa; pwd=Clear123";
con.Open();
Console.WriteLine("OK");
//向数据库插入数据
//using (SqlCommand cmd = con.CreateCommand())
//{
// cmd.CommandText = "insert into T_test(Name)values('a')";
// //返回SQL语句执行之后受影响的行数
// cmd.ExecuteNonQuery();
// Console.WriteLine("插入成功!");
//}
//查询
using (SqlCommand cmd = con.CreateCommand())
{
//cmd.CommandText = "select count(*) from T_UserPassword";
数据库受影响的结果
ExecuteScalar返回结果的第一行第一列,返回的是一个object类
//Console.WriteLine(cmd.ExecuteScalar());
cmd.CommandText = "select * from T_UserPassword where UserName='" + user + "';";
//参数占位符的使用,用于连接sql语句
// cmd.CommandText = "select * from T_UserPassword where UserName=@username";
//第一个参数是占位符名字,第二个是传入的参数名字。
// cmd.Parameters.Add(new SqlParameter("username", user));
using (SqlDataReader reader = cmd.ExecuteReader())
{
//if (reader.Read())
//{
// string dbpassword = reader.GetString(reader.GetOrdinal("Password"));
// if (password == dbpassword)
// {
// Console.WriteLine("登陆成功!");
// }
// else
// {
// Console.WriteLine("登录失败!");
// }
//}
//else
//{
// Console.WriteLine("用户名不存在!");
//}
//只能往下读取,一行一行的读
while (reader.Read() != false)
{
//根据列获得值,string类型的,GetInt32()整型
Console.WriteLine(reader.GetString(1));
//reader.GetOrdinal("UserName")根据列的名字获得序列号
Console.WriteLine(reader.GetString(reader.GetOrdinal("UserName")));
}
}
}
//插入
using (SqlCommand cmd = con.CreateCommand())
{
//cmd.CommandText = "insert into T_UserPassword(UserName,Password)values('" + user + "','" + password + "')";
//cmd.ExecuteNonQuery();
//Console.WriteLine("插入成功!");
//获得自增字段的值
cmd.CommandText = "insert into T_UserPassword(UserName,Password) OUTPUT inserted.Id values('" + user + "','" + password + "')";
//cmd.ExecuteNonQuery();
int i = Convert.ToInt32(cmd.ExecuteScalar());
Console.WriteLine(i);
Console.WriteLine("插入成功!");
// cmd.CommandText = "insert into T_UserPassword(UserName,Password) OUTPUT inserted.Id values('" + user + "','" + password + "')";
}
}
}
}
}