2023年6月21日发(作者:)
vs中C#语⾔datagridview控件与sqlserver数据库数据增删改操作实现c#中直接使⽤datagridview与⾃⼰的数据库中的数据进⾏增删改查的操作互动(以对数据库增加记录为例说明)
1.直接写⼊法:利⽤CommandText 程序如下:(); SqlCommand cmd = new SqlCommand(); tion = conn;//注意这⾥的insert语句中的单双引号使⽤。双引号使⽤在字符串上,数字型不使⽤引号,单引号是由于外⾯括号有了双引号//换⾏使⽤“+”⽤于连接 dText = "InsertList1(Name,Sex)Values('" + + "','" + + "')";//执⾏cmd命令 eNonQuery(); DataSet dslist = new DataSet(); SqlDataAdapter dalist = new SqlDataAdapter("Select * From List1", conn); (dslist, "List1");urce =["List1"];(); 2、给命令对象添加参数法:利⽤SqlParameter程序如下:();SqlCommand command = new SqlCommand("InsertList1(Name, Sex) " +"Values(@Name,@Sex)",conn);tion = conn;//添加参数SqlParameter para = new SqlParameter("@Name", r, 50); = ;(para);//添加参数SqlParameter para1 = new SqlParameter("@Sex", r, 50); = ;(para1);//执⾏cmd命令eNonQuery();DataSet dslist = new DataSet();SqlDataAdapter dalist = new SqlDataAdapter("Select * FromList1",conn);(dslist, "List1");urce =["List1"];();分析:@Id的参数,必须以@开头表⽰是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同以上程序只是说明两种⽅法的⽤法,对于这两种⽅法优劣分析见⼀下⽹址:(以下⽂字为原⽂)SqlParameter⽤法:关于Sql注⼊的基本概念,相信不需多说,⼤家都清楚,经典的注⼊语句是' or 1=1--单引号⽽截断字符串,“or 1=1”的永真式的出现使得表的⼀些信息被暴露出来,如果sql语句是select * from 的话,可能你整个表的信息都会被读取到,更严重的是,如果恶意使⽤都使⽤drop命令,那么可能你的整个数据库得全线崩溃。
当然,现在重点不是讲sql注⼊的害处,⽽是说说如何最⼤限度的避免注⼊问题。sql注⼊的存在在最⼤危害,是sql的执⾏语句没有和控制语句分开,我们想要select⼀些东西,但⽤户可能拼出' or 1=1甚⾄再加上delete/update/drop,后来是属于控制语句了,所以要避免sql的注⼊,就必须把查询语句与控制语句分开。SqlParameter给我们提供了⼀个很好的类,有了它,我们可以不现拼接字符串,也可以不再担⼼单引号带来的惨剧,因为,这⼀切会有⼈来为我们完成的。简单的给个⽰例传统的查询语句 string sql = "select * from users where user_id='" +tring["uid"] + "'";很显然,我们在这⾥拼接了字符串,这就给sql注⼊留下了可乘之机。现在,我们要改写这样的语句,使⽤SqlParameter来做SqlCommand SqlCmd = new SqlCommand(sql, SqlConn); SqlParameter _userid = new SqlParameter("uid", ); _ = tring["u_id"]; (_userid);这样,我们可以保证外接参数能被正确的转换,单引号这些危险的字符也会转义了,不会再对库造成威胁。当然,这仅是⼀个⽰例⽽已,在真实的情况下,可能你还要对 tring["u_id"]进⾏必要的检测与分析,这样才安全所以,使⽤参数化的sql语句,是⼀种很好的做法上⾯的内容是别⼈的总结,我⾃⼰在试验的时候对datagridview的增删改查是结合上述两种⽅法进⾏实现的,以下是关键的更新操作代码更新操作: try { (); // //如果报错:未将对象引⽤到对象实例 //错误原因:我们要使⽤的数据是null的 //错误纠正:检查使⽤的对象是不是写对了,例如row引⽤的表table-list2是否存在 // // SqlCommand command= new SqlCommand("Update List2 set Name=@Name,Sex=@Sex " + "WHERE Name = @oldName", conn); tion = conn; #region //添加参数0 SqlParameter para = new SqlParameter("@Name", r, 50); = [Y].Cells[0].ng(); (para); //添加参数1 SqlParameter para1 = new SqlParameter("@Sex", r, 50); = [Y].Cells[1].ng(); (para1); //添加参数2 SqlParameter para2 = new SqlParameter("@oldName", r, 50); DataRow dr = ["List2"].Rows[Y]; = dr[0, al]; (para2); #endregion // //第⼆部分 // eNonQuery(); // // (); dalist = new SqlDataAdapter("Select * From List2", conn); (dslist, "List2"); (); } catch (Exception ex) { (ng() + "打开数据库失败!"); } 这⾥的Y获取代码:给datagridview添加监听器 private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { = [ex].Cells[0].ng(); = [ex].Cells[1].ng(); Y = ex; }
2023年6月21日发(作者:)
vs中C#语⾔datagridview控件与sqlserver数据库数据增删改操作实现c#中直接使⽤datagridview与⾃⼰的数据库中的数据进⾏增删改查的操作互动(以对数据库增加记录为例说明)
1.直接写⼊法:利⽤CommandText 程序如下:(); SqlCommand cmd = new SqlCommand(); tion = conn;//注意这⾥的insert语句中的单双引号使⽤。双引号使⽤在字符串上,数字型不使⽤引号,单引号是由于外⾯括号有了双引号//换⾏使⽤“+”⽤于连接 dText = "InsertList1(Name,Sex)Values('" + + "','" + + "')";//执⾏cmd命令 eNonQuery(); DataSet dslist = new DataSet(); SqlDataAdapter dalist = new SqlDataAdapter("Select * From List1", conn); (dslist, "List1");urce =["List1"];(); 2、给命令对象添加参数法:利⽤SqlParameter程序如下:();SqlCommand command = new SqlCommand("InsertList1(Name, Sex) " +"Values(@Name,@Sex)",conn);tion = conn;//添加参数SqlParameter para = new SqlParameter("@Name", r, 50); = ;(para);//添加参数SqlParameter para1 = new SqlParameter("@Sex", r, 50); = ;(para1);//执⾏cmd命令eNonQuery();DataSet dslist = new DataSet();SqlDataAdapter dalist = new SqlDataAdapter("Select * FromList1",conn);(dslist, "List1");urce =["List1"];();分析:@Id的参数,必须以@开头表⽰是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同以上程序只是说明两种⽅法的⽤法,对于这两种⽅法优劣分析见⼀下⽹址:(以下⽂字为原⽂)SqlParameter⽤法:关于Sql注⼊的基本概念,相信不需多说,⼤家都清楚,经典的注⼊语句是' or 1=1--单引号⽽截断字符串,“or 1=1”的永真式的出现使得表的⼀些信息被暴露出来,如果sql语句是select * from 的话,可能你整个表的信息都会被读取到,更严重的是,如果恶意使⽤都使⽤drop命令,那么可能你的整个数据库得全线崩溃。
当然,现在重点不是讲sql注⼊的害处,⽽是说说如何最⼤限度的避免注⼊问题。sql注⼊的存在在最⼤危害,是sql的执⾏语句没有和控制语句分开,我们想要select⼀些东西,但⽤户可能拼出' or 1=1甚⾄再加上delete/update/drop,后来是属于控制语句了,所以要避免sql的注⼊,就必须把查询语句与控制语句分开。SqlParameter给我们提供了⼀个很好的类,有了它,我们可以不现拼接字符串,也可以不再担⼼单引号带来的惨剧,因为,这⼀切会有⼈来为我们完成的。简单的给个⽰例传统的查询语句 string sql = "select * from users where user_id='" +tring["uid"] + "'";很显然,我们在这⾥拼接了字符串,这就给sql注⼊留下了可乘之机。现在,我们要改写这样的语句,使⽤SqlParameter来做SqlCommand SqlCmd = new SqlCommand(sql, SqlConn); SqlParameter _userid = new SqlParameter("uid", ); _ = tring["u_id"]; (_userid);这样,我们可以保证外接参数能被正确的转换,单引号这些危险的字符也会转义了,不会再对库造成威胁。当然,这仅是⼀个⽰例⽽已,在真实的情况下,可能你还要对 tring["u_id"]进⾏必要的检测与分析,这样才安全所以,使⽤参数化的sql语句,是⼀种很好的做法上⾯的内容是别⼈的总结,我⾃⼰在试验的时候对datagridview的增删改查是结合上述两种⽅法进⾏实现的,以下是关键的更新操作代码更新操作: try { (); // //如果报错:未将对象引⽤到对象实例 //错误原因:我们要使⽤的数据是null的 //错误纠正:检查使⽤的对象是不是写对了,例如row引⽤的表table-list2是否存在 // // SqlCommand command= new SqlCommand("Update List2 set Name=@Name,Sex=@Sex " + "WHERE Name = @oldName", conn); tion = conn; #region //添加参数0 SqlParameter para = new SqlParameter("@Name", r, 50); = [Y].Cells[0].ng(); (para); //添加参数1 SqlParameter para1 = new SqlParameter("@Sex", r, 50); = [Y].Cells[1].ng(); (para1); //添加参数2 SqlParameter para2 = new SqlParameter("@oldName", r, 50); DataRow dr = ["List2"].Rows[Y]; = dr[0, al]; (para2); #endregion // //第⼆部分 // eNonQuery(); // // (); dalist = new SqlDataAdapter("Select * From List2", conn); (dslist, "List2"); (); } catch (Exception ex) { (ng() + "打开数据库失败!"); } 这⾥的Y获取代码:给datagridview添加监听器 private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { = [ex].Cells[0].ng(); = [ex].Cells[1].ng(); Y = ex; }
发布评论