不支持关键字: "Provider"

在利用 SqlConnection 连接数据库时出现“不支持关键字: "Provider"”的错误。

原因分析

SqlConnection 是专门用于连接 SQL Server 的对象,由于是针对特定的数据库,所以并不需要指定 Provider

连SQL Server不用指明数据提供者

解决办法

将连接字符串中的 Provider 删除即可。

不需要用provider
按下面的格式写就可以了
User ID={0}; Password={1};Initial Catalog={2};Data Source={3}

注意,Sql 和 OleDb有别,可以参考以下文章

.......在编程中并不使用这几个单词作为对象名称,还需要在前面加上 Sql 或 OleDb,加上 Sql 的对象实用于 MS SQL Server 7.0 及以上版本,加上 OleDb 的对象适用于所有数据库(管理系统),使用 Sql 开头的对象操作 MS SQL Server 数据库要比使用 OleDb 开头的对象操作 MS SQL Server 数据库性能优越,所以在数据库使用 MS SQL Server 时,应该使用 Sql 开头的对象,否则微软也不会单独开发出一系列针对 MS SQL Server 的对象了。

使用 Sql 开头的对象,名称空间是:

System.Data.SqlClient

使用 OleDb 开头的对象,名称空间是:

System.Data.OleDb

SqlConnection 和 OleDbConnection

Connection 对象用于建立和数据库的连接。对于 SqlConnection 不需要指明 provider,因为其驱动是固定的,而对于 OleDbConnection 则需要指明 provider 用以说明需要什么数据库驱动。

SqlConnection conn = new SqlConnection("server=(local);User ID=foo;Password=foo;Initial Catalog=foo");

SqlCommand 和 OleDbCommand

Command 对象用于对数据库进行操作。

SqlCommand cmd = new SqlCommand("select * from tbl", conn); //conn 为 SqlConnection 对象

SqlDataReader 和 OleDbDataReader

DataReader 对象读取数据库中的数据,它从数据库返回一个只读的、仅向前的数据流,当前内存中每次仅存在一条记录,所以它相对 ADO 的 RecordSet 性能非常优越。SqlDataReader 和 OleDbDataReader 的属性和方法还是有一定区别的,因为面向的数据库字段类型不同。

SqlDataReader dr = cmd.ExecuteReader(); //cmd 为 SqlCommand 对象

SqlDataAdapter 和 OleDbDataAdapter

DataAdapter 对象建立、初始化 DataTable,从而和 DataSet 对象结合起来在内存中存放数据,DataAdapter 对象能隐藏和 Connection、Command 对象沟通的细节,所以在使用 DataAdapter 时不需要指明 conn.Open(conn 为 Connection 对象),而使用 Command 和 DataReader 则需要指明 conn.Open

 

你可能感兴趣的:(sql,server,数据库,command,sql,dataset,user)