C#操作数据库操作之SqlClient模式

在C#中,常用的有三种 访问数据库的模式分别为:SqlClient模式、OleDb模式和Odbc模式。其中SqlClient模式是微软老大哥专门为其产品Sql Server数据库而设计的,所以如果欲使用Sql Server数据库开发应用程序的话,建议使用这种模式,其性能和效率是比其他模式的要高。OleDb模式和Odbc模式可以运用在任何支持该模式的数据 库产品中,如Access数据库、DB2、Sybase和Sql Server 数据库等。下面主要分析SqlClient模式。

1、引入相关的命名空间

在C#中要操作数据库,一般情况需要引入两个命名空间,在三种连接模式中都要引入下面的命名空间:

  •  using System.Data;

如果使用SqlClient模式的话,则需要引入如下命名空间:

  • System.Data.SqlClient;

如果使用OleDb模式的话,需要使用下面的命名空间:

  •  System.Data.Odbc;

 

2、定义连接字符串,并建立连接对象

在C#中,如果想连接数据库的话,需要使用Connection连接对象。同样,不同的连接模式下,所使用的连接对象也不同:

在SqlClient模式下,其基本连接字符串和连接对象如下:连接字

String connStr = "******;Initial Catalog=******;Integrated Security=True"; 

;server是指数据库所在的机器(服务器),如果使用当前机器(本地机器)的话,可 以使用“.”、“(local)”、“127.0.0.1”或本地机器的名字。如果使用其它机器上的数据库的话,可以使用那台机器的机器名字(确保域和工 作组的正确)或IP地址。database指的数据库的名字。uid和pwd分别代表连接数据库的用户名和密码。定义连接字符串后,就可以建立SqlClient模式下的连接对象了,在SqlClient模式下,应使用SqlConnection。

SqlConnection sConn = new SqlConnection(connString);

3、打开数据库连接

打开数据库使用Open方法,但在试图打开数据连接时会发生错误,因此常采用如下的异常控制方法(这里假设打开SqlClient模式下连接,实际上只不过连接对象的名字不同而已):

try{

sConn.Open();

}

catch(Exception ex){

MessageBox.Show("发生错误:"+ex.Message);

//Console.WriteLine("发生错误:"+ex.Message); //在控制台下使用这种方式

}

4、Command命令对象的应用

Command用于向数据库传输的命令的对象,其构造函数常用两个参数,一个参数是所使用的 命令文本(CommandText),另一个为所使用的连接对象Connection。

假设我们想使用SqlClient模式查询Sql Server中TRecord数据库中GameDetails表中的Date(日期)和Sorce(分数)两列的值,则可以建立如下的命令对象(sConn参见建立的连接sConn:

SqlCommand sCmd = new SqlCommand("SELECT Date,Sorce FROM TRecord.dbo.GameDetails",sConn);

//亦可使用如下的形式:

//SqlCommand sCmd = new SqlCommand();

//sCmd.CommandText = "SELECT Date,Sorce FROM TRecord.dbo.GameDetails";

//sCmd.Connection = sConn;

命令对象常用的有三个方法:ExecuteReader(), ExecuteNonQuery()和ExecuteScalar()。ExecuteReader方法用于返回查询结果的全部数据。 ExecuteNonQuery方法用于返回所影响的行数,一般用于Insert、Update和Delete操作。ExecuteScalar方法返回 结果中的第一行第一列的值。

5、数据读取器DataReader
DataReader用于从返回来的数据区中读取数据。其根据使用的数据连接模式不同也有不同的形式:SqlDataReader对应着SqlClient模式,OleDbDataReader对应着OleDb模式,OdbcDataReader对应着Odbc模式

数据读取器应与命令对象配合使用,下面接着4中的例子来写:

SqlDataReader sdr = null;

sdr = sCmd.ExecuteReader();     //执行命令对象,并用sdr指向结果集的第一条记录。

while(sdr.Read()){              //每读取一条记录后,指向其下一条记录

textBox2.Text = textBox2.Text + sdr["Date"]+" ";

textBox2.Text += sdr["Sorce"];    

textBox2.Text += "\r\n";        //换行

}

sdr.Close(); 

 

下面给出一个数据库操作的例子。假设在Sql Server2012中有一个数据库TRecord,其存放着一个数据表名为GameDetails,其结构为GameDetails(Date,Sorce),下面使用SqlClient模式连接数据库:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
public partial class Login : System.Web.UI.Page
{
    String connStr = "Data Source=***********;Initial Catalog=******;Integrated Security=True"; 
   
    protected void BtnLogin_Click1(object sender, EventArgs e)
    {
        String Loginid = TxtLoginId.Text.Trim();
        String Loginpwd = TxtLoginPwd.Text.Trim();
        if(Loginid.Length>=6 && Loginpwd.Length>0)
        {
            SqlConnection con = new SqlConnection(connStr);
            con.Open();
            SqlCommand cmd = new SqlCommand("Proc_QueryUser", con);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter p1 = new SqlParameter();
            p1.ParameterName = "@Customer_Account ";
            p1.DbType = DbType.Int32;
            p1.Value = TxtLoginId.Text.Trim();
            cmd.Parameters.Add(p1);

            SqlParameter p2 = new SqlParameter();
            p2.ParameterName = "@Customer_Pwd";
            p2.DbType = DbType.String;
            p2.Value = TxtLoginPwd.Text.Trim();
            cmd.Parameters.Add(p2);

            SqlDataReader sdr = cmd.ExecuteReader();
            if (sdr.HasRows)
            {
                con.Close();
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                LblMessage.Text = "用户不存在或密码错误,请重新输入";
            }
        }
        else
        {

            LblMessage.Text = "登录名或密码不符合规范,请重新输入";
        }
    }
    protected void BtnCancle_Click(object sender, EventArgs e)
    {

    }
}

 

原文使用链接:https://blog.csdn.net/qq_34093024/article/details/78196870

根据最近简单的设计一个较为完善的网上书城改善代码,近期会保持更新.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值