C#如何调用SQL数据库

C#如何调用SQL数据库,第1张

对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法

Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。

SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。与数据库的所有通讯最终都是通过Connection对象来完成的。

(1)用SqlConnection连接SQL Server

加入命名空间:using System.Data.SqlClient

连接数据库: string conString = "data source=IP地址Database=数据库名user id=用户名password=密码"

SqlConnection myconnection = new SqlConnection(conString)

myconnection.open()

(2)用OracleConnection连接Oracle

加入命名空间:using System.Data.OracleClient

连接数据库: string conString = "data source=IP地址Database=数据库名user id=用户名password=密码"

OracleConnection myconnection = new OracleConnection(conString)

myconnection.open()

(3)用 MySqlConnection连接MySQL

在.NET中连接MySQL数据库有两种方法:MySQL Connector/ODBC 和 MySQL Connector/NET,ODBC连接器是符合ODBC标准的交互平台,是.NET访问MySQL数据库最好的选择。

首先,需要下载安装MySql-connector-net-5.1.5.Data.msi这个组件。如果是默认安装,则可以在C:\Program Files\MySQL\MySQL Connector Net 5.1.5\Binaries\.NET2.0中找到MySql.Data.dll,将该文件复制到项目的bin目录下。并且在项目中添加引用MySql.Data.dll。实现代码如下:

加入命名空间:using MySql.Data.MySqlClient

连接数据库: string conString = "server=IP地址Database=数据库名user id=用户名password=密码"

MySqlConnection myconnection = new MySqlConnection(conString)

myconnection.open()

(4)用OleDbConnection连接各种数据源

由于数据源不同,相应的连接字符串也会不同。

加入命名空间:using System.Data.OleDb

连接 SQL Server: string conString = "Provider=SQLOLEDB.1Persist Security Info=Falseuser id=用户名Database=数据库名data source=COMPUTER"

OleDbConnection myconnection = new OleDbConnection(conString)

myconnection.open()

连接 Access: string conString = "Provider=Microsoft.Jet.OLEDB.4.0 data source=C:\\Database1.mdbPersist Security Info=False"

OleDbConnection myconnection = new OleDbConnection(conString)

myconnection.open()

(也可以通过建立.udl文件来获得字符串)

连接 Oracle: string conString = "Provider=MSDAORA user id=用户名password=密码data source=dbPersist Security Info=False"

OleDbConnection myconnection = new OleDbConnection(conString)

myconnection.open()

(也可以通过OracleConnection连接)

注意:使用不同的Connection对象需要导入不同的命名空间。OleDbConnection的命名空间为System.Data.OleDb。SqlConnection的命名空间为System.Data.SqlClient。OracleConnection的命名空间为System.Data.OracleClinet。

楼上的网页其实挺好的,但是我相信提问者想要一个例子,然后能够直接使用的。

提问者可以新建一个类然后贴上如下代码。这个类集合了 *** 作数据库的很多的方法,程序中直接调用即可。

文件名DataBase.cs

以下是内容:

using System

using System.Data

using System.Collections

using System.Data.SqlClient

using System.Configuration

// 数据库接口类

public class DataBase

{

//私有变量,数据库连接

protected SqlConnection Connection

protected string ConnectionString

//构造函数

public DataBase()

{

ConnectionString = "User id=saPassword=saDatabase=qqqServer=.Connect Timeout=5Max Pool size=200Min pool Size=5enlist=false"

//这里是数据库的链接字符串

//链接时需要修改用户名、密码和数据库名称

}

//保护方法,打开数据库连接

private void Open()

{

//判断数据库连接是否存在

if (Connection == null)

{

//不存在,新建并打开

Connection = new SqlConnection(ConnectionString)

Connection.Open()

}

else

{

//存在,判断是否处于关闭状态

if (Connection.State.Equals(ConnectionState.Closed))

Connection.Open() //连接处于关闭状态,重新打开

}

}

//公有方法,关闭数据库连接

public void Close()

{

if (Connection.State.Equals(ConnectionState.Open))

{

Connection.Close()//连接处于打开状态,关闭连接

}

}

/// <summary>

/// 析构函数,释放非托管资源

/// </summary>

~DataBase()

{

try

{

if (Connection != null)

Connection.Close()

}

catch { }

try

{

Dispose()

}

catch { }

}

//公有方法,释放资源

public void Dispose()

{

if (Connection != null) // 确保连接被关闭

{

Connection.Dispose()

Connection = null

}

}

//公有方法,根据Sql语句,返回是否查询到记录

public bool GetRecord(string XSqlString)

{

Open()

SqlDataAdapter adapter = new SqlDataAdapter(XSqlString, Connection)

DataSet dataset = new DataSet()

adapter.Fill(dataset)

Close()

if (dataset.Tables[0].Rows.Count >0)

{

return true

}

else

{

return false

}

}

//公有方法,返回Sql语句获得的时间值

//SqlString的格式:select 字段 from XXX where ...

public DateTime GetRecordDateTime(string XSqlString)

{

string SCount

Open()

SqlCommand Cmd = new SqlCommand(XSqlString, Connection)

SCount = Cmd.ExecuteScalar().ToString().Trim()

if (SCount == "")

SCount = "0"

Close()

return Convert.ToDateTime(SCount)

}

//公有方法,返回Sql语句获得的数据值

//SqlString的格式:select (XXX) from XXX where ...

// select distinct(XXX) from YYY where ...

public string GetRecordChar(string XSqlString)

{

string SCount

Open()

SqlCommand Cmd = new SqlCommand(XSqlString, Connection)

try

{

SCount = Cmd.ExecuteScalar().ToString().Trim()

}

catch (Exception)

{

SCount = ""

}

if (SCount == "")

SCount = ""

Close()

return SCount

}

//公有方法,返回Sql语句获得的数据值

//SqlString的格式:select count(*) from XXX where ...

// select max(XXX) from YYY where ...

public int GetRecordCount(string XSqlString)

{

string SCount

Open()

SqlCommand Cmd = new SqlCommand(XSqlString, Connection)

try

{

SCount = Cmd.ExecuteScalar().ToString().Trim()

}

catch (Exception)

{

SCount = ""

}

if (SCount == "")

SCount = "0"

Close()

return Convert.ToInt32(SCount)

}

//公有方法,返回Sql语句获得的数据值,含小数

//SqlString的格式:select count(*) from XXX where ...

// select max(XXX) from YYY where ...

public Decimal GetRecordPrice(string XSqlString)

{

string SCount

Open()

SqlCommand Cmd = new SqlCommand(XSqlString, Connection)

try

{

SCount = Cmd.ExecuteScalar().ToString().Trim()

}

catch (Exception)

{

SCount = ""

}

if (SCount == "")

SCount = "0"

Close()

return Convert.ToDecimal(SCount)

}

//公有方法,根据XWhere更新数据表XTableName中的某些纪录

//XTableName--表名

//XHT --哈希表,键为字段名,值为字段值

public DataSet AdvancedSearch(string XTableName, Hashtable XHT)

{

int Count = 0

string Fields = ""

foreach (DictionaryEntry Item in XHT)

{

if (Count != 0)

{

Fields += " and "

}

Fields += Item.Key.ToString()

Fields += " like '%"

Fields += Item.Value.ToString()

Fields += "%'"

Count++

}

Fields += " "

string SqlString = "select * from " + XTableName + " where " + Fields

Open()

SqlDataAdapter Adapter = new SqlDataAdapter(SqlString, Connection)

DataSet Ds = new DataSet()

Adapter.Fill(Ds)

Close()

return Ds

}

//私有方法,获得一个用来调用存储过程的SqlCommand

//输入:

// ProcName- 存储过程名

// Params - 用来调用存储过程的参数表

private SqlCommand CreateCommand(string ProcName, SqlParameter[] Prams)

{

Open()

SqlCommand Cmd = new SqlCommand(ProcName, Connection)

Cmd.CommandType = CommandType.StoredProcedure

if (Prams != null)

{

foreach (SqlParameter Parameter in Prams)

Cmd.Parameters.Add(Parameter)

}

return Cmd

}

//公有方法,实例化一个用于调用存储过程的参数

//输入:

// ParamName - 参数名称

// DbType - 参数类型

// Size - 参数大小

// Direction - 传递方向

// Value - 值

public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)

{

SqlParameter Param

if (Size >0)

Param = new SqlParameter(ParamName, DbType, Size)

else Param = new SqlParameter(ParamName, DbType)

Param.Direction = Direction

if (Value != null)

Param.Value = Value

return Param

}

//公有方法,实例化一个用于调用存储过程的输入参数

//输入:

// ParamName - 参数名称

// DbType - 参数类型

// Size - 参数大小

// Value - 值

public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)

{

return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value)

}

//公有方法,调用存储过程(不带参数)

//输入:

// ProcName存储过程名

//输出:

// 对Update、Insert、Delete *** 作返回影响到的行数,其他情况为-1

public int RunProc(string ProcName)

{

int Count = -1

SqlCommand Cmd = CreateCommand(ProcName, null)

Count = Cmd.ExecuteNonQuery()

Close()

return Count

}

//公有方法,调用存储过程(带参数)

//输入:

// ProcName - 存储过程名

// Params - 用来调用存储过程的参数表

//输出:

// 对Update、Insert、Delete *** 作返回影响到的行数,其他情况为-1

public int RunProc(string ProcName, SqlParameter[] Params)

{

int Count = -1

SqlCommand Cmd = CreateCommand(ProcName, Params)

Count = Cmd.ExecuteNonQuery()

Close()

return Count

}

//公有方法,调用存储过程(不带参数)

//输入:

// ProcName存储过程名

//输出:

// 将执行结果以SqlDataReader返回

//注意:使用后主意调用SqlDataReader.Close()方法

public SqlDataReader RunProcGetReader(string ProcName)

{

SqlCommand Cmd = CreateCommand(ProcName, null)

return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

}

//公有方法,调用存储过程(带参数)

//输入:

// ProcName - 存储过程名

// Params - 存储过程需要的参数

//输出:

// 将执行结果以SqlDataReader返回

//注意:使用后主意调用SqlDataReader.Close()方法

public SqlDataReader RunProcGetReader(string ProcName, SqlParameter[] Params)

{

SqlCommand Cmd = CreateCommand(ProcName, Params)

return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection)

}

//公有方法,调用存储过程(带输出参数)

//输入:

// ProcName - 存储过程名

// Params - 存储过程需要的参数

// - 输出参数放数组的第一位

//输出:

// 返回输出参数

public string RunProcGetID(string ProcName, SqlParameter[] Params)

{

SqlCommand Cmd = CreateCommand(ProcName, Params)

string SID

if (Cmd.ExecuteNonQuery() == 0)

SID = ""

else

SID = Cmd.Parameters[0].Value.ToString()

Close()

return SID

}

//公有方法,调用存储过程(带参数)

//输入:

// ProcName - 存储过程名

// Params - 存储过程需要的参数

//输出:

// 将执行结果以SqlDataReader返回

//注意:使用后主意调用SqlDataReader.Close()方法

public int RunProcGetCount(string ProcName, SqlParameter[] Params)

{

SqlCommand Cmd = CreateCommand(ProcName, Params)

string SCount

SCount = Cmd.ExecuteScalar().ToString().Trim()

if (SCount == "")

SCount = "0"

Close()

return Convert.ToInt32(SCount)

}

//公有方法,调用存储过程(不带参数)

//输入:

// ProcName存储过程名

//输出:

// 将执行结果以DataSet返回

public DataSet GetDataSet(string ProcName)

{

DataSet dataset = new DataSet()

try

{

Open()

SqlDataAdapter adapter = new SqlDataAdapter(ProcName, Connection)

adapter.Fill(dataset)

Close()

}

catch (Exception ex)

{

Console.WriteLine(ex.Message)

}

return dataset

}

//公有方法,调用存储过程(带参数)

//输入:

// ProcName存储过程名

//输出:

// 将执行结果以DataSet返回

public DataSet GetDataSet(string ProcName, SqlParameter[] Params)

{

//Open()

SqlCommand Cmd = CreateCommand(ProcName, Params)

SqlDataAdapter adapter = new SqlDataAdapter(Cmd)

DataSet dataset = new DataSet()

adapter.Fill(dataset)

Close()

return dataset

}

//公有方法,根据Sql语句,返回一个结果数据集

public DataSet GetDataSetSql(string XSqlString)

{

Open()

SqlDataAdapter Adapter = new SqlDataAdapter(XSqlString, Connection)

DataSet Ds = new DataSet()

Adapter.Fill(Ds)

Close()

return Ds

}

//公有方法,根据Sql语句,插入记录

public int Insert(string XSqlString)

{

int Count = -1

Open()

SqlCommand cmd = new SqlCommand(XSqlString, Connection)

try

{

Count = cmd.ExecuteNonQuery()

}

catch (Exception ex)

{

Console.WriteLine(ex.Message)

}

Close()

return Count

}

//公有方法,根据Sql语句,插入记录并返回生成的ID号

public int GetIDInsert(string XSqlString)

{

int Count = -1

Open()

SqlCommand cmd = new SqlCommand(XSqlString, Connection)

try

{

Count = int.Parse(cmd.ExecuteScalar().ToString().Trim())

}

catch (Exception)

{ }

Close()

return Count

}

//公有方法,根据Sql语句,执行备份或还原数据库

public int bak(string XSqlString)

{

int Count = 0

Open()

SqlCommand cmd = new SqlCommand(XSqlString, Connection)

try

{

Count = cmd.ExecuteNonQuery()

Count = 0

}

catch (Exception ex)

{

Console.WriteLine(ex.Message)

Count = -1

}

Close()

return Count

}

}

下面是调用的举例

//实例化

DataBase db = new DataBase()

//将数据库中的内容填充combobox控件

cmb_Scope.Items.Clear()

string sqlstr = "select distinct scope from equipment"

cmb_Scope.DataSource = db.GetDataSetSql(sqlstr).Tables[0]

cmb_Scope.DisplayMember = "scope"

cmb_state.SelectedIndex = 0

//执行语句

string sqlstr1 = string.Format("update equipment set x0 =“1”)

db.Insert(sqlstr1)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/6780686.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存