2023年6月21日发(作者:)
C#连接数据库的⽅法以下内容给⼤家c#连接数据库的⽅法的相关介绍,本⽂⾮常具有参考借鉴价值,具体详情如下所⽰。连接数据库的技术叫,它是⽤来向数据库提交sql语句的⼀堆类。这⾥连接的是Sql Server 2008数据库,其他数据库⽤法差不多,就是调⽤的类名不⼀样。 ⾸先在(本地的添加应⽤程序配置⽂件,本地还要添加程序集)上配置数据库连接字符串,添加如下节点代码: name是链接字符串名称,可以随便取。connectionString是链接字符串。Data Source数据库所在服务器IP地址,这⾥是本地写“.”。 Initial Catalog是数据库名称。User Id是数据库⽤户,其中sa是最⾼权限管理员账户,需要谨慎使⽤,⽽是针对数据库建⽴数据库的专⽤受限账户。Password是密码。 程序使⽤数据库时,先提取配置⽂件的连接字符串赋值给⼀个变量。代码如下:public static readonly string connstr =tionStrings["connstr"].ConnectionString;ConfigurationManager是静态类,提供对客户端应⽤程序配置⽂件的访问。 接着打开数据库连接,使⽤完毕后⽤using⾃动释放连接:SqlConnection是个密封类,表⽰ SQL Server 数据库的⼀个打开的连接。接着是执⾏SQL语句,先定义向数据库发送指令⽤到的SqlCommand类,定义之后确定语句执⾏的连接对象是conn,再确定要执⾏的SQL语句,⽤法举例如下://SqlConnection为建⽴和数据库连接的对象using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”Insert into T_Student*(Name,Age) values(‘XXX',18)”;// CommandText要执⾏的SQL语句eNonQuery();//执⾏}}ExecuteNonQuery()⼀般⽤来执⾏Update、Delete、Insert语句对于⼀种⼀⾏、⼀列返回值的结果执⾏⽤ExecuteScalar(),它返回object类型。举例如下:using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”select Name from T_Student where Name=”XXX””;// CommandText要执⾏的SQL语句eScalar();//执⾏}}返回值有多⾏结果时要⽤ExecuteReader(),返回类型SqlDataReader,需要释放,⽤法举例:using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”select * from T_Student where Age<18”;using(SqlDataReader reader=eReader(){ while(()){ string name=ing(1);//获得第⼀列列的值 int age=32(2); //获得第2列列的值 ine(name); ine(ng());}}}} 其中Read⽅法返回bool类型,查询结果是放到数据库中,没有放到客户端。初始指针指向第⼀条数据之前,每调⽤⼀次Reader指针下移⼀条,只要没有移到最后⼀条之后,就直接返回true。reader的GetStringGetInt32等⽅法只接受整数参数,也就是序号,⽤GetOrdinal⽅法根据列名动态得到序号。0列第⼀列第⼆列第三列IdNameAgeHobby1XXX18勾搭妹⼦2王旭30勾搭妹⼦图 1 数据库T_Student表为了避免数据库注⼊漏洞,微软设置有查询参数,举例如下:dText =”select * from T_Student where Age<@Age”;(new SqlParameter(“@Age”,19));这⾥把@Age设置为查询参数,但是@参数不能⽤了替换表名、字段名、select之类的关键字等。 SqlDataReader是和连接相关的,SqlDataReader中的查询结果并不是放在程序中的,⽽是放在数据库服务器中,SqlDataReader只是相当于⼀个游标,指到哪⾥读到哪⾥。 提供了数据集机制,DataSet,存在本地内存,其包含若⼲DataTable,DataTable包含若⼲⾏DataRow。使⽤⽅法:DataSet dataset=new DataSet();SqlDataAdapter adapter=new SqlDataAdapter(cmd);(dataset);SqlDataAdapter是⼀个帮我们把SqlCommand查询结果填充到DataSet中的类,DataSet相当于本地的list集合(⼩数据库)。遍历⽅法如下:DataTable table=[0];//⼀般情况下只有⼀个Tables,当同时执⾏多个select语句时有多个Tables。DataRowCollection rows=;for(int i=0;i<;i++){ DataRow row=rows[i];int age=(int)row[“Age”];//遍历年龄}基本上所有的步骤都是:打开链接--创建命令--执⾏--处理执⾏结果。所以可以写个公共类⾃⼰⽤,避免重复代码,详细代码如下:public static class SqlHelper { public static readonly string connstr = tionStrings["connstr"].ConnectionString; public static SqlConnection OpenConnection()//建⽴连接 { SqlConnection conn = new SqlConnection(connstr); (); return conn; } public static int ExecuteNonQuery(string cmdText, params SqlParameter[] parameters)//注意看有使⽤长度可变参数进⾏了简化 { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteNonQuery(conn, cmdText, parameters); } } public static object ExecuteScalar(string cmdText, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteScalar(conn, cmdText, parameters); } } public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteDataTable(conn, cmdText, parameters); } } public static int ExecuteNonQuery(SqlConnection conn,string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); return eNonQuery();//返回执⾏了多少⾏ } } public static object ExecuteScalar(SqlConnection conn, string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); return eScalar(); } } public static DataTable ExecuteDataTable(SqlConnection conn, string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataTable dt = new DataTable(); (dt); return dt; } } } public static object ToDBValue(this object value) { return value == null ? : value; } public static object FromDBValue(this object dbValue) { return dbValue == ? null : dbValue; } }封装⽅法的原则:把不变的放到⽅法⾥,把变化的放到参数⾥,SqlHelper类⾥返回值是⼀⾏⼀列的⽤ExecuteScaler,ExecuteNonQuery⼀般⽤来执⾏UpdateDeleteInsert语句,ExecuteDataTable只⽤来执⾏查询结果⽐较少的sql,返回值是DataTable。在数据库中NULL和“”不⼀样,NULL和0也不⼀样。数据库中NULL表⽰不“知道”。假如⼀个表中有个可空字段Name,如果有⼏个实例Name为NULL,select * from T_Student where Name=NULL是查不到任何数据的。select * from T_Student where Name is NULL可以查到所有Name填NULL的数据。需求:如果没输⼊姓名,则姓名应该为NULL,如果没输⼊年龄,则年龄应该为NULL。问题:在SqlParameter如果参数值为null,则表⽰没有提供参数的值,会报错。解决⽅法:.NET提供⽤来表⽰数据库中的NULL。以为是object类型。所以需要这样⽤:object objName;string name=;if(<0){ objName=;}else{ objName=name;}接着SqlParameter参数改为objName。同时读取数据库时,存在Null,返回给.NET的值也是。所以读取后还要判断后赋值,⽤法如下:if(row[“Name”]==){ name=null;}else{ name=(string)row[“Name”];}但是也有个问题,如果是int类型,则不能为null,就该定义的时候⽤int? age。必须严格区分0,NULL和“”,否则出现问题很难查到。附带上次讲的SqlHelper⾥的两个函数,就是对上⾯两个⽤法的封装,可以直接⽤在SqlParameter参数中。可空数据输⼊数据库时⽤public static object ToDBValue(this object value) { return value == null ? : value; }输出时⽤ public static object FromDBValue(this object dbValue) { return dbValue == ? null : dbValue; }这个主要是⽤在SqlParameter中,实现可空数据的输⼊输出。以上内容是关于本⽂给⼤家介绍的C#连接数据库的⽅法,希望⼤家喜欢。
2023年6月21日发(作者:)
C#连接数据库的⽅法以下内容给⼤家c#连接数据库的⽅法的相关介绍,本⽂⾮常具有参考借鉴价值,具体详情如下所⽰。连接数据库的技术叫,它是⽤来向数据库提交sql语句的⼀堆类。这⾥连接的是Sql Server 2008数据库,其他数据库⽤法差不多,就是调⽤的类名不⼀样。 ⾸先在(本地的添加应⽤程序配置⽂件,本地还要添加程序集)上配置数据库连接字符串,添加如下节点代码: name是链接字符串名称,可以随便取。connectionString是链接字符串。Data Source数据库所在服务器IP地址,这⾥是本地写“.”。 Initial Catalog是数据库名称。User Id是数据库⽤户,其中sa是最⾼权限管理员账户,需要谨慎使⽤,⽽是针对数据库建⽴数据库的专⽤受限账户。Password是密码。 程序使⽤数据库时,先提取配置⽂件的连接字符串赋值给⼀个变量。代码如下:public static readonly string connstr =tionStrings["connstr"].ConnectionString;ConfigurationManager是静态类,提供对客户端应⽤程序配置⽂件的访问。 接着打开数据库连接,使⽤完毕后⽤using⾃动释放连接:SqlConnection是个密封类,表⽰ SQL Server 数据库的⼀个打开的连接。接着是执⾏SQL语句,先定义向数据库发送指令⽤到的SqlCommand类,定义之后确定语句执⾏的连接对象是conn,再确定要执⾏的SQL语句,⽤法举例如下://SqlConnection为建⽴和数据库连接的对象using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”Insert into T_Student*(Name,Age) values(‘XXX',18)”;// CommandText要执⾏的SQL语句eNonQuery();//执⾏}}ExecuteNonQuery()⼀般⽤来执⾏Update、Delete、Insert语句对于⼀种⼀⾏、⼀列返回值的结果执⾏⽤ExecuteScalar(),它返回object类型。举例如下:using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”select Name from T_Student where Name=”XXX””;// CommandText要执⾏的SQL语句eScalar();//执⾏}}返回值有多⾏结果时要⽤ExecuteReader(),返回类型SqlDataReader,需要释放,⽤法举例:using(SqlConnection conn = new SqlConnection(connstr)){();//打开连接//通过连接创建⼀个向数据库发命令(Command)的对象SqlCommandusing(SqlCommand cmd = Command()){dText =”select * from T_Student where Age<18”;using(SqlDataReader reader=eReader(){ while(()){ string name=ing(1);//获得第⼀列列的值 int age=32(2); //获得第2列列的值 ine(name); ine(ng());}}}} 其中Read⽅法返回bool类型,查询结果是放到数据库中,没有放到客户端。初始指针指向第⼀条数据之前,每调⽤⼀次Reader指针下移⼀条,只要没有移到最后⼀条之后,就直接返回true。reader的GetStringGetInt32等⽅法只接受整数参数,也就是序号,⽤GetOrdinal⽅法根据列名动态得到序号。0列第⼀列第⼆列第三列IdNameAgeHobby1XXX18勾搭妹⼦2王旭30勾搭妹⼦图 1 数据库T_Student表为了避免数据库注⼊漏洞,微软设置有查询参数,举例如下:dText =”select * from T_Student where Age<@Age”;(new SqlParameter(“@Age”,19));这⾥把@Age设置为查询参数,但是@参数不能⽤了替换表名、字段名、select之类的关键字等。 SqlDataReader是和连接相关的,SqlDataReader中的查询结果并不是放在程序中的,⽽是放在数据库服务器中,SqlDataReader只是相当于⼀个游标,指到哪⾥读到哪⾥。 提供了数据集机制,DataSet,存在本地内存,其包含若⼲DataTable,DataTable包含若⼲⾏DataRow。使⽤⽅法:DataSet dataset=new DataSet();SqlDataAdapter adapter=new SqlDataAdapter(cmd);(dataset);SqlDataAdapter是⼀个帮我们把SqlCommand查询结果填充到DataSet中的类,DataSet相当于本地的list集合(⼩数据库)。遍历⽅法如下:DataTable table=[0];//⼀般情况下只有⼀个Tables,当同时执⾏多个select语句时有多个Tables。DataRowCollection rows=;for(int i=0;i<;i++){ DataRow row=rows[i];int age=(int)row[“Age”];//遍历年龄}基本上所有的步骤都是:打开链接--创建命令--执⾏--处理执⾏结果。所以可以写个公共类⾃⼰⽤,避免重复代码,详细代码如下:public static class SqlHelper { public static readonly string connstr = tionStrings["connstr"].ConnectionString; public static SqlConnection OpenConnection()//建⽴连接 { SqlConnection conn = new SqlConnection(connstr); (); return conn; } public static int ExecuteNonQuery(string cmdText, params SqlParameter[] parameters)//注意看有使⽤长度可变参数进⾏了简化 { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteNonQuery(conn, cmdText, parameters); } } public static object ExecuteScalar(string cmdText, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteScalar(conn, cmdText, parameters); } } public static DataTable ExecuteDataTable(string cmdText, params SqlParameter[] parameters) { using (SqlConnection conn = new SqlConnection(connstr)) { (); return ExecuteDataTable(conn, cmdText, parameters); } } public static int ExecuteNonQuery(SqlConnection conn,string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); return eNonQuery();//返回执⾏了多少⾏ } } public static object ExecuteScalar(SqlConnection conn, string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); return eScalar(); } } public static DataTable ExecuteDataTable(SqlConnection conn, string cmdText, params SqlParameter[] parameters) { using (SqlCommand cmd = Command()) { dText = cmdText; ge(parameters); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataTable dt = new DataTable(); (dt); return dt; } } } public static object ToDBValue(this object value) { return value == null ? : value; } public static object FromDBValue(this object dbValue) { return dbValue == ? null : dbValue; } }封装⽅法的原则:把不变的放到⽅法⾥,把变化的放到参数⾥,SqlHelper类⾥返回值是⼀⾏⼀列的⽤ExecuteScaler,ExecuteNonQuery⼀般⽤来执⾏UpdateDeleteInsert语句,ExecuteDataTable只⽤来执⾏查询结果⽐较少的sql,返回值是DataTable。在数据库中NULL和“”不⼀样,NULL和0也不⼀样。数据库中NULL表⽰不“知道”。假如⼀个表中有个可空字段Name,如果有⼏个实例Name为NULL,select * from T_Student where Name=NULL是查不到任何数据的。select * from T_Student where Name is NULL可以查到所有Name填NULL的数据。需求:如果没输⼊姓名,则姓名应该为NULL,如果没输⼊年龄,则年龄应该为NULL。问题:在SqlParameter如果参数值为null,则表⽰没有提供参数的值,会报错。解决⽅法:.NET提供⽤来表⽰数据库中的NULL。以为是object类型。所以需要这样⽤:object objName;string name=;if(<0){ objName=;}else{ objName=name;}接着SqlParameter参数改为objName。同时读取数据库时,存在Null,返回给.NET的值也是。所以读取后还要判断后赋值,⽤法如下:if(row[“Name”]==){ name=null;}else{ name=(string)row[“Name”];}但是也有个问题,如果是int类型,则不能为null,就该定义的时候⽤int? age。必须严格区分0,NULL和“”,否则出现问题很难查到。附带上次讲的SqlHelper⾥的两个函数,就是对上⾯两个⽤法的封装,可以直接⽤在SqlParameter参数中。可空数据输⼊数据库时⽤public static object ToDBValue(this object value) { return value == null ? : value; }输出时⽤ public static object FromDBValue(this object dbValue) { return dbValue == ? null : dbValue; }这个主要是⽤在SqlParameter中,实现可空数据的输⼊输出。以上内容是关于本⽂给⼤家介绍的C#连接数据库的⽅法,希望⼤家喜欢。
发布评论