昨天架设了ASP.NET的三层架构,但是到最后发现不会连接数据库。晚上找了点资料大部分时候是用ADO.NET。为了方便先建一个测试项目测试数据库连接,连接SQLserver数据库具体实现如下:
using System; using System.Data; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;
namespace ToTesting { ??? class DBconnTesting ??? { ??????? public static void Main(string[] args) ??????? { ??????????? /*1、拼接连接字符串string strCon="Server=数据库服务器名(127.0.0.1);Integrated Security=SSPI(安全策略是否使用windows用户名登录);Database=mydatabase(数据库名);User ID=Ya****ng;Password=***;pooling=false(是否使用连接池)";//必须写用户名密码。不写会出错 ???????????? *2、创建Connection的一种数据库对象。SqlConnetion conn =new SqlConnection(strCon); ???????????? *3、打开连接conn.Open(); ???????????? *4、拼接sql语句string strSql="select * from tb_AdminUser"; ???????????? *5、创建Command对象SqlCommand com=new SqlCommand(strSql,conn); ???????????? *6、创建数据读取DataReader对象接受数据库查询结果,SqlDataReader sdr=com.ExecuteReader(); ???????????? *7、处理读取到的数据if(sdr.Read()){……} ???????????? */ ??????????? SqlConnection conn = new SqlConnection(@"Server=218.198.33.210/;Integrated Security=false;DataBase=DB_Zyyy;User ID=Ya****ng;Password=***;pooling=false"); ??????????? //SqlConnection conn = new SqlConnection(@"Data Source=218.198.33.210/;Initial Catalog=DB_Zyyy;Persist Security Info=True;User ID=Ya****ng;Password=***;"); ??????????? //SqlConnection conn = new SqlConnection(@"Server=502SERVER/;Database=DB_Zyyy;User Id=Ya****ng;Password=***;"); ??????????? conn.Open();
?/*????????string strSql = "select * from? tb_AdminUser"; ??????????? SqlCommand com = new SqlCommand(strSql,conn); ??????????? SqlDataReader sdr = com.ExecuteReader();??????
??????????? //com.ExecuteNonQuery;//返回执行T-SQL语句影响的行数 ??????????? //com.ExecuteScalar;//返回查询结果的第一行第一列 ??????????? //com.ExecuteXmlReader;//返回一个XmlReader对象 ??????????? //com.ExecuteReader;//返回一个SqlDataReader对象 ??????????? /* ???????????? * 传说ADO.net中通过SqlConnetion类创建到SQLServer数据库的连接 ???????????? * SqlConnection代表一个数据库连接ADO.NET中的连接等资源都实现了 ???????????? * IDisposable接口,可以使用using进行资源管理 ???????????? * 具体实现如下: ???????????? */ ??????????? using (SqlCommand cmd = conn.CreateCommand()) ??????????? { ??????????????? cmd.CommandText ="select count(*) from? tb_AdminUser where i_Id=@ID and vc_UserName=@UName"; ??????????????? cmd.Parameters.Add(new SqlParameter("ID","1")); ??????????????? cmd.Parameters.Add(new SqlParameter("UName","admin")); ??????????????? int i=Convert.ToInt32(cmd.ExecuteScalar()); ??????????????? if (i>0) ??????????????? { ??????????????????? Console.WriteLine("查询成功"+i); ??????????????????? Console.ReadKey(); ??????????????? } ??????????????? else ??????????????? { ??????????????????? Console.WriteLine("查询失败"+i); ??????????????????? Console.ReadKey(); ??????????????? }???????????
??????? } ??? } }
***一些解释********************************************************** 连接字符串: 1、类似使用windows登陆 Data Source=数据库服务器名(或者IP地址) 如果连接的是本地数据库实例,服务器名可以写成"."或者"localhost"或者"local" Initial Catalog=数据库名 使用集成安全连接:Integrated Security=True//说明使用的是windows身份验证 最终结果: Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=True 2、类似使用SQLserver用户名米密码登陆 使用特定的用户密码连接:User ID=用户名;Password=密码 (UserID 可以简写为uid Password可以简写成pwd 最终结果: Data Source=数据库服务器名;Initial Catalog=数据库名;User ID=用户名;Pwd=密码 *************************************************************************
?
?****一些资料********************************************************************************************************
ADO.NET 连接数据库字符串(Oracle、SqlServer、Access、ODBC) ADO.NET 连接到 SQL Server SQL Server .NET Framework 数据提供程序支持类似于 OLE DB (ADO) 连接字符串格式的连接字符串格式。 using (SqlConnection connection = new SqlConnection(connectionString)) { ??? connection.Open(); ??? // Do work here. } 连接到 OLE DB 数据源 OLE DB .NET Framework 数据提供程序通过 OleDbConnection 对象提供与使用 OLE DB 公开的数据源的连接以及与 Microsoft SQL Server 6.x 或较早版本(通过用于 SQL Server 的 OLE DB 提供程序 (SQLOLEDB))的连接。 using (OleDbConnection connection = new OleDbConnection(connectionString)) { ??? connection.Open(); ??? // Do work here. } 连接到 ODBC 数据源 ODBC .NET Framework 数据提供程序通过 OdbcConnection 对象提供与使用 ODBC 公开的数据源的连接。 using (OdbcConnection connection =? new OdbcConnection(connectionString)) { ??? connection.Open(); ??? // Do work here. } 连接到 Oracle 数据源 Oracle .NET Framework 数据提供程序使用 OracleConnection 对象提供与 Oracle 数据源的连接。 using (OracleConnection connection = new OracleConnection(connectionString)) { ??? connection.Open(); ??? // Do work here. } OracleConnection nwindConn = new OracleConnection("Data Source=MyOracleServer;Integrated Security=yes;"); nwindConn.Open(); 以下是连接实例: ACCESS string conStr=@"provider=microsoft.Jet.OleDb.4.0;data source=d://accessData.mdb;uid=sa;pwd=dd";
SQL SERVER string conStr=@"Server=bwj;database=demo;uid=sa;pwd=";
ORACLE string conStr=@"Provider=MSDAORA.1;Password=pwd;User ID=user_name;Data Source=link_str"
?****一些资料********************************************************************************************************
需要注意的问题都在注释中还有一个问题就是,SQL注入的问题,有两种解决办法,
一种是将字符串中的单引号换成双引号:
SqlConnection con=new SqlConnection(strCon); //可以sql注入 string strSql="select * from ScoreTabel where UserName='"+tbUserName.Text+"' and PassWord='"+tbPassWord.Text+"'"; //防止SQL注入 string strSql="select * from ScoreTabel where UserName='"+tbUserName.Text.Replace("'",""")+"' and PassWord='"+tbPassWord.Text.Replace("'",""")+"'";
?
但是我没有用成功,原理是把用户输入的单引号替换成双引号,但是一对双引号中的单个双引号会引起后面的字符全部变成字符串,无法正常使用,但是可以把单引号替换成空格,我想这个应该是能够实现的。没有测试。
另一种方法是用@占位符,或者叫占位字符串,或者说是参数化:
cmd.CommandText ="select count(*) from? tb_AdminUser where i_Id=@ID and vc_UserName=@UName"; cmd.Parameters.Add(new SqlParameter("ID","1")); cmd.Parameters.Add(new SqlParameter("UName","admin"));
??
?
if (sdr.Read()) ??????????? { ??????????????? Console.WriteLine("成功"); ??????????????? Console.ReadKey(); ??????????? } ??????????? else ??????????? { ??????????????? Console.WriteLine("失败"); ??????????????? Console.ReadKey(); ??????????? } ??????????? sdr.Close(); ??????????? conn.Close();
*/
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|