Vb.net 根据其他列数据从两个表中检索数据

Vb.net 根据其他列数据从两个表中检索数据,vb.net,Vb.net,这是公司名称组合框。。其中用户选择名称。。 我希望公司名称显示在网格中。。。但根据表格,只有一列公司代码 我应该在公司表中显示带有公司名称的表部门数据 这两个表都有共同的公司代码 到目前为止我一直在做这件事。。但是出错了 Private Sub btnDivUpdate\u单击(ByVal发送者作为系统对象,ByVal e作为 System.EventArgs)处理btnDivUpdate。单击 Dim con作为新的SqlConnection(“数据源”) con.Open() Dim cmd

这是公司名称组合框。。其中用户选择名称。。 我希望公司名称显示在网格中。。。但根据表格,只有一列公司代码

我应该在公司表中显示带有公司名称的表部门数据 这两个表都有共同的公司代码

到目前为止我一直在做这件事。。但是出错了

Private Sub btnDivUpdate\u单击(ByVal发送者作为系统对象,ByVal e作为
System.EventArgs)处理btnDivUpdate。单击
Dim con作为新的SqlConnection(“数据源”)
con.Open()
Dim cmd作为新的SqlCommand(“更新tblDivision set tblCompany.CompanyName=””和
CMBDIVOCOMNAME.Text&“”,tblDivision.Description1='”&txtDivDesc.Text&“,
tblDivision.DivSeq='”&txtDivSeq.Text&',tblDivision.CreatedBy='”&
txtDivCreatedBy.Text&“”,tblDivision.CreatedDate='”&
txtDivCreatedDate.Text&“”,tblDivision.LastModifiedBy='”&
txtDivLastModifiedBy.Text&“”,tblDivision.LastModifiedDate='”&
txtDivLastModifiedDate.Text&“在tblDivision.CompanyCode=
tblCompany.CompanyCode,其中DivisionCode='“&cmbDivCode.Text&'”,con)
cmd.CommandType=CommandType.Text
cmd.ExecuteNonQuery()
Dim cmd2作为新的SqlCommand(“从tblDivision中选择*,con)
Dim da2作为新的SqlDataAdapter(cmd2)
Dim ds2作为新数据集()
da2.填充(ds2,
“TBL愿景”)
DataGridDivision.DataSource=ds2.Tables(0)
con.Close()
端接头

您需要两个单独的sql语句来完成此操作,因为您一次只能对一个表写入更改。幸运的是,您可以将它们作为同一执行命令和事务的一部分发送。在这期间,我们将把您的
SELECT
语句纳入考虑范围,并修复sql注入漏洞和潜在的拒绝服务问题。生成的代码将比您拥有的代码长一点,但它将更易于遵循和维护,无论长度如何,而且会更安全:

Private子btnDivUpdate\u单击(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理btnDivUpdate。单击
Dim sql作为字符串=_
“开始事务t1;”&_
“更新tblDivision”和_
“集合描述1=@Description”&_
“,DivSeq=@Sequence”&_
“,CreatedBy=@CreatedBy”&_
“,CreatedDate=@CreatedDate”&_
“,LastModifiedBy=@LastModifiedBy”&_
,LastModifiedDate=@LastModifiedDate
“其中DivisionCode=@DivisionCode;”_
“更新tblCompany”和_
“设置tblCompany.CompanyName=@CompanyName”
“来自TBL公司”和_
“tblDivision.CompanyCode=tblCompany.CompanyCode上的内部联接tblDivision”&_
其中tblDivision.DivisionCode=@DivisionCode;“&_
“提交事务t1;”&_
“从tblDivision中选择*”
Dim dt作为新数据表()
使用con作为新的SqlConnection(“数据源”)_
cmd作为新的SqlCommand(sql,con)
“我不得不猜测这里的柱子长度
cmd.Parameters.Add(“@Description”,SqlDbType.NVarChar,200).Value=txtDivDesc.Text
cmd.Parameters.Add(“@Sequence”,SqlDbType.Int).Value=CInt(txtDivSeq.Text)
cmd.Parameters.Add(“@CreatedBy”,SqlDbType.NVarChar,40).Value=txtDivCreatedBy.Text
cmd.Parameters.Add(“@CreatedDate”,SqlDbType.DateTime).Value=CDate(txtDivCreatedDate.Text)
cmd.Parameters.Add(“@LastModifiedBy”,SqlDbType.NVarChar,40)。Value=txtDivLastModifiedBy.Text
cmd.Parameters.Add(“@LastModifiedDate”,SqlDbType.DateTime).Value=CDate(txtDivLastModifiedDate.Text)
cmd.Parameters.Add(“@DivisionCode”,SqlDbType.NVarChar,10)。Value=cmbDivCode.Text
cmd.Parameters.Add(“@CompanyName”,SqlDbType.NVarChar,60)。Value=cmbDivComName.Text
con.Open()
将rdr用作SqlDataReader=cmd.ExecuteReader()
dt.负载(rdr)
终端使用
终端使用
DataGridDivision.DataSource=dt
端接头

您遇到了什么错误?啊。这将容易受到sql注入攻击。它实际上是在乞求被黑客攻击,但不是我的反对票。每个人总有一天会遇到这种情况。