[技术| 编程·课件·Linux] ADO.Net小总结

xywhere · 发布于 2013-08-15 21:22 · 2838 次阅读
1665
本帖最后由 xywhere 于 2013-8-15 21:25 编辑

很久很久不用它了,有些自己都看不懂了,有缘人来拿走吧。

偶然发现的,貌似对数据库最后一个实验有些帮助,对以后软院的.net课程也有一定帮助吧
1. 数据库连接-Connnection类:
//初始化一个Connnection对象
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=
|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
//创建命令方法返回一个SqlCommand’
SqlCommand cmd = conn.CreateCommand()
//打开连接
conn.Open();         
//关闭连接
conn.Close();  
2. 执行SQL命令-Command类
//初始化一个Command对象
SqlCommand cmd = conn.CreateCommand();
//用查询文本初始化
SqlCommand cmd = SqlCommand(string cmdText);
//执行查询命令,返回DataReader对象
SqlDataReader reader = cmd.ExecuteReader();
//执行非查询语句(插入,更新,删除),返回影响行数
int i = cmd.ExecuteNonQuery();
//执行查询,并返回查询结果集的第一行,第一列,忽略其他行和列,返回类型为Object
object o = cmd.ExecuteScalar();
3. 提供数据库DataReader 类
//执行查询命令,返回DataReader对象
SqlDataReader reader = cmd.ExecuteReader();
//使 System.Data.SqlClient.SqlDataReader 前进到下一条记录,,如果存在多个行,则为 true;否则为 false
reader.Read();
//获取指定列的字符串形式的值。参数:i:从零开始的列序号。
reader.GetString (i);
//获取列序号,参数为列名
reader.GetOrdinal("proId")
//i为列号,name为列名,返回值为Object 需要转换
object reader[int i]
object reader[string name]
//参数化查询   @后可以随意起名字
cmd.CommandText = "select count(*) from table2 where name=@username and password=@password";
cmd.Parameters.Add(new SqlParameter("username", username));
cmd.Parameters.Add(new SqlParameter("password",password));
4 使用配置文件
右击->项目->添加新建项->应用程序配置文件,写入以下代码,配置字符串连接
<connectionStrings>
    <add name="Connstr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=
|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"/>
</connectionStrings>
右击->引用->添加引用 System.Configuration 以下为用法
//获取连接字符串
string connStr=ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString ;
//初始化连接
using (SqlConnection conn = new SqlConnection(connStr ))
5 简化操作创建SQLHelper类
class SQLHelper // params  可实现多个参数
    {
       //第一个参数sql语句,第二个为可变参数,返回所影响的行数
        public static int ExecuteNonQuary(string sql, params SqlParameter[] parameters)
        {
            String connStr=
ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString ;
            using (SqlConnection conn = new SqlConnection(connStr ))
            {   conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteScalar();
                }
            }
        }
* *///这种方法不适合,读取数据不能断开连接
       /* public static SqlDataReader  ExecuteReader(string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteReader();
                }
            }
        }
     public static DataTable  ExecuteDataTable (string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    DataSet dataset = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                    return dataset.Tables[0];
;             }
            }
        }
    }
用法:
1.SQLHelper.ExecuteNonQuary("insert into T_person(Name,Age) values(@name,@age)",new SqlParameter("name",name),new SqlParameter("age",age));
2.object i= SQLHelper.ExecuteScalar("select count(*) from T_person");
3.DataTable table= SQLHelper.ExecuteDataTable("select * from T_person");
6. DataAdatp和DataSet 的用法
//使用DataSet 对象获取数据
string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                DataSet dataset=new DataSet();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_person";
//DataAdapter 执行命令取出数据
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
//填充数据集
                    adapter.Fill(dataset );
//返回数据集中第一个表
                    DataTable table = dataset.Tables[0];
//返回表中第一列
                    DataRow row = table.Rows[0];
//打印出列中的Name字段
Console.WriteLine(row["Name"]);
                }
            }
//使用DataApapter 对象更新数据
方法1
string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                DataSet dataset=new DataSet();
                SqlDataAdapter adapter = new SqlDataAdapter();
//创建插入命令,也可以创建查询,更新,删除道理一样
                 adapter.InsertCommand = conn.CreateCommand();
                 adapter.InsertCommand.CommandText = "insert into T_person(Name,Age) values('abc','123')";  
                  adapter.InsertCommand.ExecuteNonQuery();
               
            }
方法2
string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                DataSet dataset=new DataSet();
                using (SqlCommand cmd = conn.CreateCommand())
               {
                    cmd.CommandText = "select * from T_person";
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(dataset );
                    DataTable table = dataset.Tables[0];
                    DataRow row = table.Rows[0];
                    row["Name"] = "jason1235";
                    //对dataset的修改都是内存中的没有提交到数据库
                    //用adapter.update(dataset)
//SqlCommandBuilder自动生成你要更改数据的Sql语句
                     SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                     adapter.Update(dataset);
                }
            }
7.数据库中空数据在C#中的表示方法
int? =null; 加个问号表示可空的int
            int? i = null;
            if (i == null)
            {
                //int i1 =(int) i; //把可能为空的转换为一定不空的 要强制类型转换 保证不空
                Console.WriteLine("i3为空");
            }
            if (i.HasValue)
            {
                int i2 = i.Value ;//第二种方法
                Console.WriteLine("不为空");
            }
            else
            {
                Console.WriteLine("为空");
            }
8.类型化数据集的用法
右击项目->添加->新建项->数据集->然后把一张表拖入数据集中就会自动生成
//实例化一个类型化数据集类命名方式为 : 表名+TableAdapter
T_personTableAdapter adapter = new T_personTableAdapter();
//命名空间.数据集名.表名+DataTable(就是一张表)  获取数据
            Dataset版登陆.DataSet1.T_personDataTable  data = adapter.GetData();
//data.count返回表中行数
            for (int i = 0; i < data.Count; i++)
            {
// data;定位所用的行     i代表行数
                Dataset版登陆.DataSet1.T_personRow  userRow = data;
// userRow.Name 定位所用的字段
                Console.WriteLine(userRow.Name );
            }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1学分 +5 收起 理由
EagleFlag + 5 感谢您为软院筒子们提供有用信息!

查看全部评分

共收到 22 条回复
cfyrwang · #2 · 2013-8-15 23:45:41  回复 支持 反对
挺不错的。。工程实践好像有一课.net。。会有用的,话说,我学的怎么和你的不一样。。
勇敢De面对 · #3 · 2013-8-16 09:01:31  回复 支持 反对
mark一下呗
阎魔あい · #4 · 2013-8-16 10:38:47  回复
知识贴~~~~~~

点评

能看懂???  详情 回复 发表于 2013-8-16 19:54
xywhere · #5 · 2013-8-16 19:54:22  回复 支持 反对

能看懂???

点评

肯定看不懂啊。。。。。我是门外汉  详情 回复 发表于 2013-8-17 11:16
terry · #6 · 2013-8-16 20:23:27  回复 支持 反对
我也忘了,和java的差不多

点评

高手说话了。。  详情 回复 发表于 2013-8-16 20:34
xywhere · #7 · 2013-8-16 20:34:39  回复 支持 反对
terry 发表于 2013-8-16 20:23
我也忘了,和java的差不多

高手说话了。。

点评

纯小白路过的,高手都去补课了啊。。。。。  详情 回复 发表于 2013-8-16 20:38
terry · #8 · 2013-8-16 20:38:29  回复 支持 反对
xywhere 发表于 2013-8-16 20:34
高手说话了。。

纯小白路过的,高手都去补课了啊。。。。。

点评

高手不要谦虚了。  详情 回复 发表于 2013-8-16 20:44
xywhere · #9 · 2013-8-16 20:44:05  回复 支持 反对
terry 发表于 2013-8-16 20:38
纯小白路过的,高手都去补课了啊。。。。。

高手不要谦虚了。

点评

,高手都在民间  详情 回复 发表于 2013-8-17 16:39
阎魔あい · #10 · 2013-8-17 11:16:21  回复 支持 反对

肯定看不懂啊。。。。。我是门外汉

点评

恩你是门外的汉子。。  详情 回复 发表于 2013-8-17 12:10
xywhere · #11 · 2013-8-17 12:10:45  回复 支持 反对
阎魔あい 发表于 2013-8-17 11:16
肯定看不懂啊。。。。。我是门外汉

恩你是门外的汉子。。

点评

是,,门外的。。。女汉子!!!  详情 回复 发表于 2013-8-17 12:55
阎魔あい · #12 · 2013-8-17 12:55:10  回复 支持 反对
xywhere 发表于 2013-8-17 12:10
恩你是门外的汉子。。

是,,门外的。。。女汉子!!!

点评

抠脚大汉。。  详情 回复 发表于 2013-8-17 20:40
terry · #13 · 2013-8-17 16:39:23  回复 支持 反对
xywhere 发表于 2013-8-16 20:44
高手不要谦虚了。

,高手都在民间  

点评

。。。。  详情 回复 发表于 2013-8-17 20:39
xywhere · #14 · 2013-8-17 20:39:32  回复 支持 反对
terry 发表于 2013-8-17 16:39
,高手都在民间

。。。。
xywhere · #15 · 2013-8-17 20:40:27  回复 支持 反对
阎魔あい 发表于 2013-8-17 12:55
是,,门外的。。。女汉子!!!

抠脚大汉。。

点评

明明貌似很没精神的样子。。。。  详情 回复 发表于 2013-8-18 10:44
sanjican · #16 · 2013-8-17 20:52:38  回复 支持 反对
一点一点积累。。一点一点进化~~

点评

进化。。。  详情 回复 发表于 2013-8-18 12:03
阎魔あい · #17 · 2013-8-18 10:44:58  回复 支持 反对

明明貌似很没精神的样子。。。。

点评

我已不知道咱俩再说什么了。 。。  详情 回复 发表于 2013-8-18 12:02
xywhere · #18 · 2013-8-18 12:02:28  回复 支持 反对
阎魔あい 发表于 2013-8-18 10:44
明明貌似很没精神的样子。。。。

我已不知道咱俩再说什么了。 。。

点评

我还知道。。。。是你太累了已经开始机械性的了  详情 回复 发表于 2013-8-18 12:23
xywhere · #19 · 2013-8-18 12:03:26  回复 支持 反对
sanjican 发表于 2013-8-17 20:52
一点一点积累。。一点一点进化~~

进化。。。
阎魔あい · #20 · 2013-8-18 12:23:51  回复 支持 反对
xywhere 发表于 2013-8-18 12:02
我已不知道咱俩再说什么了。 。。

我还知道。。。。是你太累了已经开始机械性的了

点评

不累啊 现在还行吧 适应了 。。节奏 很好  详情 回复 发表于 2013-8-18 17:25
xywhere · #21 · 2013-8-18 17:25:28  回复 支持 反对
阎魔あい 发表于 2013-8-18 12:23
我还知道。。。。是你太累了已经开始机械性的了

不累啊 现在还行吧  适应了 。。节奏 很好
EagleFlag · #22 · 2013-8-23 23:26:39  回复
很不错

点评

没用了  详情 回复 发表于 2013-8-24 09:19
xywhere · #23 · 2013-8-24 09:19:20  回复 支持 反对
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表